diff --git a/app/components/app/division/entry-form.vue b/app/components/app/division/entry-form.vue
index 640d1fd5..1b9edc4e 100644
--- a/app/components/app/division/entry-form.vue
+++ b/app/components/app/division/entry-form.vue
@@ -49,8 +49,9 @@ const [division] = defineField('division_id')
if (props.values) {
if (props.values.code !== undefined) code.value = props.values.code
if (props.values.name !== undefined) name.value = props.values.name
- if (props.values.parent_id !== undefined) parent.value = props.values.parent_id
- if (props.values.division_id !== undefined) division.value = props.values.division_id
+ if (props.values.parent_id !== undefined) parent.value = String(props.values.parent_id)
+ if (props.values.division_id !== undefined) division.value = String(props.values.division_id)
+ console.log(props.values)
}
const resetForm = () => {
diff --git a/app/components/content/division/list.vue b/app/components/content/division/list.vue
index 20c83baa..17c3f8f1 100644
--- a/app/components/content/division/list.vue
+++ b/app/components/content/division/list.vue
@@ -129,7 +129,6 @@ watch(
})
if (result.success) {
const currentData = result.body.data || []
- console.log(currentData)
divisionsTrees.value = convertDivisionToTreeItems(currentData || [])
}
},
diff --git a/app/components/pub/base/select-tree/leaf.vue b/app/components/pub/base/select-tree/leaf.vue
index 81dabf2b..d98b8b27 100644
--- a/app/components/pub/base/select-tree/leaf.vue
+++ b/app/components/pub/base/select-tree/leaf.vue
@@ -24,7 +24,7 @@ function handleSelect(value: string) {
:class="{ 'pl-8': shouldAlign }"
@select="() => handleSelect(item.value)"
>
- {{ item.label }}
+ {{ item.label }}
.leaf-node {
- @apply w-full;
+ width: 100%;
}
diff --git a/app/components/pub/base/select-tree/tree-select.vue b/app/components/pub/base/select-tree/tree-select.vue
index d0525336..1994e533 100644
--- a/app/components/pub/base/select-tree/tree-select.vue
+++ b/app/components/pub/base/select-tree/tree-select.vue
@@ -11,6 +11,7 @@ const props = defineProps<{
const modelValue = defineModel()
const open = ref(false)
+const searchValue = ref('')
function handleSelect(newVal: string) {
modelValue.value = newVal
@@ -30,6 +31,27 @@ function findLabel(value: string, items: TreeItem[]): string | undefined {
const selectedLabel = computed(() => {
return modelValue.value ? findLabel(modelValue.value, props.data) : '--- select item'
})
+
+const filteredData = computed(() => {
+ if (!searchValue.value) return props.data
+ // recursive filter
+ function filterTree(items: TreeItem[]): TreeItem[] {
+ return items
+ .map(item => {
+ const match = item.label.toLowerCase().includes(searchValue.value.toLowerCase())
+ let children: TreeItem[] | undefined = undefined
+ if (item.children) {
+ children = filterTree(item.children)
+ }
+ if (match || (children && children.length > 0)) {
+ return { ...item, children }
+ }
+ return null
+ })
+ .filter(Boolean) as TreeItem[]
+ }
+ return filterTree(props.data)
+})
@@ -50,12 +72,12 @@ const selectedLabel = computed(() => {
-
+
Item tidak ditemukan.
{
* @returns TreeItem[]
*/
export function convertDivisionToTreeItems(divisions: any[]): TreeItem[] {
- return divisions.map((division) => ({
+ return divisions.filter((division: Division) => !division.parent_id).map((division: Division) => ({
value: division.id ? String(division.id) : division.code,
label: division.name,
hasChildren: Array.isArray(division.childrens) && division.childrens.length > 0,
diff --git a/app/models/division.ts b/app/models/division.ts
index 7de835b5..f796134e 100644
--- a/app/models/division.ts
+++ b/app/models/division.ts
@@ -2,6 +2,8 @@ export interface Division {
id?: number
code: string
name: string
+ parent_id?: number | null
+ childrens?: Division[] | null
}
export interface DivisionPosition {