export function useParent(name, onEffect) { const path = `../${name}/index`; return { relations: { [path]: { type: 'ancestor', linked() { onEffect && onEffect.call(this); }, linkChanged() { onEffect && onEffect.call(this); }, unlinked() { onEffect && onEffect.call(this); }, }, }, mixin: Behavior({ created() { Object.defineProperty(this, 'parent', { get: () => this.getRelationNodes(path)[0], }); Object.defineProperty(this, 'index', { // @ts-ignore get: () => { var _a, _b; return (_b = (_a = this.parent) === null || _a === void 0 ? void 0 : _a.children) === null || _b === void 0 ? void 0 : _b.indexOf(this); }, }); }, }), }; } export function useChildren(name, onEffect) { const path = `../${name}/index`; return { relations: { [path]: { type: 'descendant', linked(target) { onEffect && onEffect.call(this, target); }, linkChanged(target) { onEffect && onEffect.call(this, target); }, unlinked(target) { onEffect && onEffect.call(this, target); }, }, }, mixin: Behavior({ created() { Object.defineProperty(this, 'children', { get: () => this.getRelationNodes(path) || [], }); }, }), }; }