You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.5 KiB
65 lines
1.5 KiB
3 years ago
|
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) || [],
|
||
|
});
|
||
|
},
|
||
|
}),
|
||
|
};
|
||
|
}
|