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.
		
		
		
		
			
				
					57 lines
				
				1.8 KiB
			
		
		
			
		
	
	
					57 lines
				
				1.8 KiB
			| 
											9 months 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) || [],
 | ||
|  |                 });
 | ||
|  |             },
 | ||
|  |         }),
 | ||
|  |     };
 | ||
|  | }
 |