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 Block, { BlockProperties } from './model/Block';
import Blocks from './model/Blocks'; import Blocks from './model/Blocks';
import Categories from '../abstract/ModuleCategories'; import Categories from '../abstract/ModuleCategories';
import Category from '../abstract/ModuleCategory'; import Category, { getItemsByCategory } from '../abstract/ModuleCategory';
import { BlocksEvents } from './types'; import { BlocksByCategory, BlocksEvents } from './types';
import BlocksView from './view/BlocksView'; import BlocksView from './view/BlocksView';
export type BlockEvent = `${BlocksEvents}`; export type BlockEvent = `${BlocksEvents}`;
@ -278,6 +278,19 @@ export default class BlockManager extends ItemManagerModule<BlockManagerConfig,
return this._dragBlock; 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 * Render blocks
* @param {Array} blocks Blocks to render, without the argument will render all global 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 { Model } from '../../common';
import { isFunction } from 'underscore'; import { isFunction } from 'underscore';
import Editor from '../../editor'; import Editor from '../../editor';
import { CategoryProperties } from '../../abstract/ModuleCategory'; import Category, { CategoryProperties } from '../../abstract/ModuleCategory';
import { ComponentDefinition } from '../../dom_components/model/types'; import { ComponentDefinition } from '../../dom_components/model/types';
/** @private */ /** @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 * Get block id
* @returns {String} * @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}*/ /**{START_EVENTS}*/
export enum BlocksEvents { export enum BlocksEvents {
/** /**

Loading…
Cancel
Save