From a23e3c2e609d0d48f90258bd58ce8f6827c34561 Mon Sep 17 00:00:00 2001 From: Leon Liu Date: Wed, 1 Jan 2025 19:43:07 +0900 Subject: [PATCH] update --- src/App.vue | 33 +++++++++----- src/components/FilterDetail.vue | 10 +++-- src/components/FilterNode.vue | 47 ++++++++++++++++++++ src/components/TreeNav.vue | 78 +++++++++++++++++++++++++-------- src/models/index.ts | 30 +++++++++++++ src/services/filter.ts | 18 ++++---- src/style.css | 4 ++ 7 files changed, 175 insertions(+), 45 deletions(-) create mode 100644 src/components/FilterNode.vue diff --git a/src/App.vue b/src/App.vue index 7f3aa80..2c41ba4 100644 --- a/src/App.vue +++ b/src/App.vue @@ -9,7 +9,8 @@ import * as O from 'fp-ts/Option' import * as A from 'fp-ts/lib/Array'; import { pipe } from 'fp-ts/function' import * as uuid from 'uuid'; -import type { Filter, FilterConfig } from './models' +import type { Filter, FilterConfig, FilterNode } from './models' +import { filterToTreeNode } from './services/filter' const darkMode = ref(document.documentElement.classList.contains('dark')) @@ -22,11 +23,6 @@ watch(darkMode, (dark) => { ) localStorage.theme = dark ? 'dark' : 'light' }) -function onNodeSelect(node: TreeNode) { -} - -function onNodeUnselect(node: TreeNode) { -} let defaultFilters: Filter[] = [ { type: 'leaf', id: uuid.v4(), name: "", show: true, enabled: true, rule: {} }, @@ -36,28 +32,41 @@ let defaultFilters: Filter[] = [ ] } ] -const filters = ref(pipe( +const nodes = ref(pipe( localStorage.getItem("filters"), O.fromNullable, O.map((value): FilterConfig => JSON.parse(value)), O.map(value => value.filters), O.getOrElse(() => defaultFilters), + A.map(filterToTreeNode) )) -const selectedFilter = ref() +const selectedFilter = ref() + +function onDelete() { + let target = selectedFilter.value! + let array = nodes.value as FilterNode[] + if (target.parent) { + array = target.parent.children! + } + let index = array.findIndex(item => item === target) + array.splice(index, 1) + selectedFilter.value = undefined +} +