parent
							
								
									b8c85c91b4
								
							
						
					
					
						commit
						258f4e980d
					
				@ -52,6 +52,7 @@ export class AdjacencyListRepository extends Repository {
 | 
			
		||||
      if (!nodeMap[`${node[foreignKey]}`]) {
 | 
			
		||||
        nodeMap[`${node[foreignKey]}`] = [];
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      nodeMap[`${node[foreignKey]}`].push(node);
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
@ -90,8 +91,15 @@ export class AdjacencyListRepository extends Repository {
 | 
			
		||||
          delete node[childrenKey];
 | 
			
		||||
        }
 | 
			
		||||
      } else {
 | 
			
		||||
        // patch for sequelize toJSON
 | 
			
		||||
        if (node._options.includeNames && !node._options.includeNames.includes(childrenKey)) {
 | 
			
		||||
          node._options.includeNames.push(childrenKey);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        node.setDataValue('__index', `${index}`);
 | 
			
		||||
 | 
			
		||||
        children = node.getDataValue(childrenKey);
 | 
			
		||||
 | 
			
		||||
        if (children.length === 0) {
 | 
			
		||||
          node.setDataValue(childrenKey, undefined);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
@ -0,0 +1,72 @@
 | 
			
		||||
import { MockServer } from '@nocobase/test';
 | 
			
		||||
import { Database } from '@nocobase/database';
 | 
			
		||||
import { createApp } from '../index';
 | 
			
		||||
import lodash from 'lodash';
 | 
			
		||||
 | 
			
		||||
describe('tree', () => {
 | 
			
		||||
  let app: MockServer;
 | 
			
		||||
  let agent;
 | 
			
		||||
 | 
			
		||||
  let db: Database;
 | 
			
		||||
  beforeEach(async () => {
 | 
			
		||||
    app = await createApp();
 | 
			
		||||
 | 
			
		||||
    agent = app.agent();
 | 
			
		||||
    db = app.db;
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  afterEach(async () => {
 | 
			
		||||
    await app.destroy();
 | 
			
		||||
  });
 | 
			
		||||
 | 
			
		||||
  it('should list tree', async () => {
 | 
			
		||||
    await db.getRepository('collections').create({
 | 
			
		||||
      values: {
 | 
			
		||||
        name: 'categories',
 | 
			
		||||
        tree: 'adjacency-list',
 | 
			
		||||
        fields: [
 | 
			
		||||
          { type: 'string', name: 'name' },
 | 
			
		||||
          {
 | 
			
		||||
            type: 'belongsTo',
 | 
			
		||||
            name: 'parent',
 | 
			
		||||
            foreignKey: 'parent_id',
 | 
			
		||||
            treeParent: true,
 | 
			
		||||
            target: 'categories',
 | 
			
		||||
          },
 | 
			
		||||
          {
 | 
			
		||||
            type: 'hasMany',
 | 
			
		||||
            name: 'children',
 | 
			
		||||
            foreignKey: 'parent_id',
 | 
			
		||||
            treeChildren: true,
 | 
			
		||||
            target: 'categories',
 | 
			
		||||
          },
 | 
			
		||||
        ],
 | 
			
		||||
      },
 | 
			
		||||
      context: {},
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    const c1 = await db.getRepository('categories').create({
 | 
			
		||||
      values: { name: 'c1' },
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    await db.getRepository('categories').create({
 | 
			
		||||
      values: [
 | 
			
		||||
        {
 | 
			
		||||
          name: 'c2',
 | 
			
		||||
          parent: {
 | 
			
		||||
            name: 'c1',
 | 
			
		||||
            id: c1.get('id'),
 | 
			
		||||
          },
 | 
			
		||||
        },
 | 
			
		||||
      ],
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    const listResponse = await agent.resource('categories').list({
 | 
			
		||||
      appends: ['parent'],
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    expect(listResponse.statusCode).toBe(200);
 | 
			
		||||
 | 
			
		||||
    console.log(listResponse.body);
 | 
			
		||||
  });
 | 
			
		||||
});
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user