Browse Source

Add getBlocksByCategory

pull/5642/head
Artur Arseniev 2 years ago
parent
commit
30f39c78bd
  1. 17
      src/block_manager/index.ts
  2. 7
      src/block_manager/model/Block.ts
  3. 5
      src/block_manager/types.ts

17
src/block_manager/index.ts

@ -35,8 +35,8 @@ import defaults, { BlockManagerConfig } from './config/config';
import Block, { BlockProperties } from './model/Block';
import Blocks from './model/Blocks';
import Categories from '../abstract/ModuleCategories';
import Category from '../abstract/ModuleCategory';
import { BlocksEvents } from './types';
import Category, { getItemsByCategory } from '../abstract/ModuleCategory';
import { BlocksByCategory, BlocksEvents } from './types';
import BlocksView from './view/BlocksView';
export type BlockEvent = `${BlocksEvents}`;
@ -278,6 +278,19 @@ export default class BlockManager extends ItemManagerModule<BlockManagerConfig,
return this._dragBlock;
}
/**
* Get blocks by category.
* @example
* blockManager.getBlocksByCategory();
* // Returns an array of items of this type
* // > { category?: Category; items: Block[] }
*
* // NOTE: The item without category is the one containing blocks without category.
*/
getBlocksByCategory(): BlocksByCategory[] {
return getItemsByCategory<Block>(this.getAll().models);
}
/**
* Render blocks
* @param {Array} blocks Blocks to render, without the argument will render all global blocks

7
src/block_manager/model/Block.ts

@ -1,7 +1,7 @@
import { Model } from '../../common';
import { isFunction } from 'underscore';
import Editor from '../../editor';
import { CategoryProperties } from '../../abstract/ModuleCategory';
import Category, { CategoryProperties } from '../../abstract/ModuleCategory';
import { ComponentDefinition } from '../../dom_components/model/types';
/** @private */
@ -93,6 +93,11 @@ export default class Block extends Model<BlockProperties> {
};
}
get category(): Category | undefined {
const cat = this.get('category');
return cat instanceof Category ? cat : undefined;
}
/**
* Get block id
* @returns {String}

5
src/block_manager/types.ts

@ -1,3 +1,8 @@
import { ItemsByCategory } from '../abstract/ModuleCategory';
import Block from './model/Block';
export interface BlocksByCategory extends ItemsByCategory<Block> {}
/**{START_EVENTS}*/
export enum BlocksEvents {
/**

Loading…
Cancel
Save