diff --git a/src/MergeTrap.ts b/src/MergeTrap.ts index 81ca408..89628b1 100644 --- a/src/MergeTrap.ts +++ b/src/MergeTrap.ts @@ -1,5 +1,6 @@ import Vue from 'vue'; import { + QueryBuilderGroupSym, RuleSet, QueryBuilderGroup, ComponentRegistration, MergeTrap as MergeTrapInterface, Rule, } from '@/types'; @@ -12,7 +13,7 @@ function getNextGroup(group: QueryBuilderGroup): QueryBuilderGroup { do { vm = vm.$parent; - } while (vm.$options.name !== 'QueryBuilderGroup'); + } while ((vm as QueryBuilderGroup).type !== QueryBuilderGroupSym); return vm as QueryBuilderGroup; } diff --git a/src/QueryBuilderGroup.vue b/src/QueryBuilderGroup.vue index 2a0cc58..c9d4d11 100644 --- a/src/QueryBuilderGroup.vue +++ b/src/QueryBuilderGroup.vue @@ -7,7 +7,7 @@ import Draggable, { } from 'vuedraggable'; import Sortable, { SortableOptions, PutResult } from 'sortablejs'; import { - QueryBuilderConfig, RuleSet, Rule, OperatorDefinition, RuleDefinition, + QueryBuilderConfig, RuleSet, Rule, OperatorDefinition, RuleDefinition, QueryBuilderGroupSym, GroupOperatorSlotProps, GroupCtrlSlotProps, QueryBuilderGroup as QueryBuilderGroupInterface, } from '@/types'; import { isQueryBuilderConfig, isRule } from '@/guards'; @@ -79,7 +79,9 @@ export default class QueryBuilderGroup extends Vue implements QueryBuilderGroupI trap: ((position: number, newChild: RuleSet | Rule) => void) | null = null; - selectedRule: string = '' + selectedRule: string = ''; + + type: Symbol = QueryBuilderGroupSym; get children(): Array { if (this.maxDepthExeeded) { diff --git a/src/types.ts b/src/types.ts index 8f43ecc..e6cc1f9 100644 --- a/src/types.ts +++ b/src/types.ts @@ -50,11 +50,14 @@ export interface RuleSlotProps { updateRuleData: (newData: any) => void, } +export const QueryBuilderGroupSym = Symbol('QueryBuilderGroup'); + export interface QueryBuilderGroup extends Vue { selectedOperator: string, depth: number, trap: ((position: number, newChild: RuleSet | Rule) => void) | null, children: Array, + type: Symbol, } export interface ComponentRegistration {