diff --git a/src/components/Discover/table/actAndSeq.vue b/src/components/Discover/Filter/ActAndSeq.vue
similarity index 100%
rename from src/components/Discover/table/actAndSeq.vue
rename to src/components/Discover/Filter/ActAndSeq.vue
diff --git a/src/components/Discover/table/actOcc.vue b/src/components/Discover/Filter/ActOcc.vue
similarity index 100%
rename from src/components/Discover/table/actOcc.vue
rename to src/components/Discover/Filter/ActOcc.vue
diff --git a/src/components/Discover/table/actOccCase.vue b/src/components/Discover/Filter/ActOccCase.vue
similarity index 100%
rename from src/components/Discover/table/actOccCase.vue
rename to src/components/Discover/Filter/ActOccCase.vue
diff --git a/src/components/Discover/Filter/Funnel.vue b/src/components/Discover/Filter/Funnel.vue
new file mode 100644
index 0000000..ad7ab6e
--- /dev/null
+++ b/src/components/Discover/Filter/Funnel.vue
@@ -0,0 +1,120 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/Discover/sidebarFilter.vue b/src/components/Discover/SidebarFilter.vue
similarity index 76%
rename from src/components/Discover/sidebarFilter.vue
rename to src/components/Discover/SidebarFilter.vue
index 9b14121..1435803 100644
--- a/src/components/Discover/sidebarFilter.vue
+++ b/src/components/Discover/SidebarFilter.vue
@@ -60,11 +60,9 @@
-
Activity Select
-
@@ -80,7 +78,6 @@
-
@@ -88,44 +85,8 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
@@ -133,44 +94,20 @@
import { storeToRefs } from 'pinia';
import LoadingStore from '@/stores/loading.js';
import AllMapDataStore from '@/stores/allMapData.js';
-import ActOccCase from '@/components/Discover/table/actOccCase.vue';
-import ActOcc from '@/components/Discover/table/actOcc.vue';
-import ActAndSeq from '@/components/Discover/table/actAndSeq.vue';
+import ActOccCase from '@/components/Discover/Filter/ActOccCase.vue';
+import ActOcc from '@/components/Discover/Filter/ActOcc.vue';
+import ActAndSeq from '@/components/Discover/Filter/ActAndSeq.vue';
+import Funnel from '@/components/Discover/Filter/Funnel.vue';
export default {
- props: {
- sidebarFilter: {
- type: Boolean,
- require: true,
- },
- filterTasks: {
- type: Array,
- require: true,
- },
- filterStartToEnd: {
- type: Array,
- require: true,
- },
- filterEndToStart: {
- type: Array,
- require: true,
- },
- filterTimeframe: {
- type: Object,
- require: true,
- },
- filterTrace: {
- type: Array,
- require: true,
- },
- },
+ props: ['sidebarFilter', 'filterTasks', 'filterStartToEnd', 'filterEndToStart', 'filterTimeframe', 'filterTrace'],
setup() {
const loadingStore = LoadingStore();
const allMapDataStore = AllMapDataStore();
const { isLoading } = storeToRefs(loadingStore);
- const { hasResultRule, temporaryData, postRuleData} = storeToRefs(allMapDataStore);
+ const { hasResultRule, temporaryData, postRuleData, ruleData, isRuleData} = storeToRefs(allMapDataStore);
- return { isLoading, hasResultRule, temporaryData, postRuleData, allMapDataStore }
+ return { isLoading, hasResultRule, temporaryData, postRuleData, ruleData, isRuleData, allMapDataStore }
},
data() {
return {
@@ -204,14 +141,13 @@ export default {
isEndSelected: null,
isActAllTask: true,
rowData: [],
- ruleData: [],
- isRuleData: [], // toggle button data
}
},
components: {
ActOccCase,
ActOcc,
ActAndSeq,
+ Funnel,
},
computed: {
// All Task
@@ -233,25 +169,12 @@ export default {
}
},
methods: {
-
-
/**
* @param {string} switch Summary or Insight
*/
switchTab(tab) {
this.tab = tab;
},
- /**
- * @param {boolean} e ture | false
- * @param {numble} index rule's index
- */
- isRule(e, index){
- let rule = this.isRuleData[index];
- // 先取得 rule object
- // 為了讓 data 順序不亂掉,將值指向 0,submitAll 時再刪掉
- if(!e) this.temporaryData[index] = 0;
- else this.temporaryData[index] = rule;
- },
/**
* Number to percentage
* @param {number} val
@@ -371,10 +294,9 @@ export default {
/**
* @param {object} e task's object
*/
- setRule(e) {
- let label = "";
- let type = "";
- let includeStr = e.is_exclude?" Exclude ":" Include ";
+ setRule(e) {
+ let label, type;
+ const includeStr = e.is_exclude?" Exclude ":" Include ";
switch(e.type){
case "contains-task":
@@ -412,17 +334,15 @@ export default {
label = `from ${e.lower} to ${e.upper} ${includeStr}`
type = "Trace"
break
- default:
- break
- }
+ };
return {
- type:type,
- label:label,
+ type,
+ label,
toggle:true,
- }
+ };
},
/**
- * 清空選項
+ * @param {boolean} massage true | false 清空選項
*/
reset(massage) {
this.selectFilterTask = null;
@@ -446,7 +366,7 @@ export default {
// 若陣列為空,則跳出警告訊息
if(sele[0] === 'Sequence'){
if(sele[1] === 'Have activity(s)'){ // Activity Sequence 選 Have activity(s) 的行為
- if(this.selectFilterTask === null || this.selectFilterTask.length === 0) return this.$toast.error('Not selected');
+ if(!this.selectFilterTask?.length) return this.$toast.error('Not selected');
else {
// 將多選的 task 拆成一包包 obj
data = this.selectFilterTask.map(task => {
@@ -457,7 +377,7 @@ export default {
}
})
};
- }else if(sele[1] === 'Start activity / end activity') { // Activity Sequence 選 Start activity & end activity 的行為
+ }else if(sele[1] === 'Start activity / end activity') { // Activity Sequence 選 Start activity / end activity 的行為
if(sele[2] === 'Start') {
if(this.selectFilterStart === null || this.selectFilterStart.length === 0) return this.$toast.error('Not selected');
else {
@@ -502,16 +422,20 @@ export default {
const postData = Array.isArray(data) ? data : [data];
// 快速檢查每一 filter 規則是否為空集合
- // this.logId = this.$route.params.logId;
this.postRuleData = postData;
await this.allMapDataStore.checkHasResult();
// 有 Data 就加進 Funnel,沒有 Data 不加進 Funnel 和跳錯誤訊息
if(this.hasResultRule === null) return;
else if(this.hasResultRule) {
- this.temporaryData.push(...postData);
- this.isRuleData = Array.from(this.temporaryData);
- this.ruleData = this.temporaryData.map(e => this.setRule(e));
+ if(!this.temporaryData?.length){
+ this.temporaryData.push(...postData);
+ this.isRuleData = Array.from(this.temporaryData);
+ this.ruleData = this.isRuleData.map(e => this.setRule(e));
+ }else {
+ this.isRuleData.push(...postData);
+ this.ruleData = this.isRuleData.map(e => this.setRule(e));
+ }
this.reset(false);
this.isLoading = true;
await new Promise(resolve => setTimeout(resolve, 1000));
@@ -525,67 +449,18 @@ export default {
this.$toast.warning('No Data.');
};
},
- // header:Funnel 刪除全部的 Funnel
- deleteRule(index) {
- if(index === 'all') {
- this.temporaryData = [];
- this.isRuleData = [];
- this.$toast.success('All deleted.');
- }else{
- this.$toast.success(`Delete ${this.ruleData[index].label}.`);
- this.temporaryData.splice(index, 1);
- this.isRuleData.splice(index, 1);
- this.ruleData.splice(index, 1);
- }
- },
- // header:Funnel 發送暫存的選取資料
- async submitAll() {
- this.postRuleData = this.temporaryData; // 取得 submit 的資料
- this.postRuleData = this.postRuleData.filter(item => item !== 0); // 有 toggle button 的話,找出並刪除陣列中為 0 的項目
- await this.allMapDataStore.checkHasResult();
-
- if(this.hasResultRule === null) return;
- else if(this.hasResultRule) {
- this.isLoading = true;
- await this.allMapDataStore.addTempFilterId();
- await this.allMapDataStore.getAllMapData();
- await this.$emit('submit-all');
- this.isLoading = false;
- this.$toast.success('Filter Success. View the Map.');
- }else {
- this.isLoading = true;
- await new Promise(resolve => setTimeout(resolve, 1000));
- this.isLoading = false;
- this.$toast.warning('No Data.');
- };
- },
+ /**
+ * create map
+ */
+ sumbitAll() {
+ this.$emit('submit-all');
+ }
},
}
-
diff --git a/src/components/Discover/sidebarState.vue b/src/components/Discover/SidebarState.vue
similarity index 100%
rename from src/components/Discover/sidebarState.vue
rename to src/components/Discover/SidebarState.vue
diff --git a/src/components/Discover/sidebarTraces.vue b/src/components/Discover/SidebarTraces.vue
similarity index 100%
rename from src/components/Discover/sidebarTraces.vue
rename to src/components/Discover/SidebarTraces.vue
diff --git a/src/components/Discover/sidebarView.vue b/src/components/Discover/SidebarView.vue
similarity index 100%
rename from src/components/Discover/sidebarView.vue
rename to src/components/Discover/SidebarView.vue
diff --git a/src/stores/allMapData.js b/src/stores/allMapData.js
index f03c920..dc549e5 100644
--- a/src/stores/allMapData.js
+++ b/src/stores/allMapData.js
@@ -31,6 +31,8 @@ export default defineStore('allMapDataStore', {
hasResultRule: null, // click Apply 後檢查是否有 Data
temporaryData: [], // 沒被 apply 的 Data
postRuleData: [], // has-result API & temp-filters API 的 Data
+ ruleData: [], // Funnle view's data
+ isRuleData: [], // toggle button data
}),
getters: {
processMap: state => {
diff --git a/src/views/Discover/index.vue b/src/views/Discover/index.vue
index 70f6307..34df867 100644
--- a/src/views/Discover/index.vue
+++ b/src/views/Discover/index.vue
@@ -58,10 +58,10 @@ import { storeToRefs } from 'pinia';
import LoadingStore from '@/stores/loading.js';
import AllMapDataStore from '@/stores/allMapData.js';
import cytoscapeMap from '@/module/cytoscapeMap.js';
-import SidebarView from '@/components/Discover/sidebarView.vue';
-import SidebarState from '@/components/Discover/sidebarState.vue';
-import SidebarTraces from '@/components/Discover/sidebarTraces.vue';
-import SidebarFilter from '@/components/Discover/sidebarFilter.vue';
+import SidebarView from '@/components/Discover/SidebarView.vue';
+import SidebarState from '@/components/Discover/SidebarState.vue';
+import SidebarTraces from '@/components/Discover/SidebarTraces.vue';
+import SidebarFilter from '@/components/Discover/SidebarFilter.vue';
export default {
setup() {