Browse Source

Update data resolver watcher (#6676)

* Fix data resolver data collection instances update

* Add block events callbacks

* Update Block events callback types

* Add asset event callbacks

* Fix TS
dev
Artur Arseniev 1 day ago
committed by GitHub
parent
commit
6370546f43
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 36
      packages/core/src/asset_manager/types.ts
  2. 6
      packages/core/src/block_manager/index.ts
  3. 37
      packages/core/src/block_manager/types.ts
  4. 6
      packages/core/src/common/index.ts
  5. 4
      packages/core/src/data_sources/model/data_collection/types.ts
  6. 2
      packages/core/src/dom_components/model/ModelDataResolverWatchers.ts
  7. 7
      packages/core/src/editor/types.ts

36
packages/core/src/asset_manager/types.ts

@ -1,3 +1,12 @@
import AssetManager from '.';
import {
EventCallbackAdd,
EventCallbackAll,
EventCallbackRemove,
EventCallbackRemoveBefore,
EventCallbackUpdate,
ObjectAny,
} from '../common';
import ComponentView from '../dom_components/view/ComponentView';
import Asset from './model/Asset';
@ -12,6 +21,18 @@ export interface AssetOpenOptions {
target?: any;
}
export interface AssetsCustomData {
am: AssetManager;
open: boolean;
assets: Asset[];
types: string[];
container: HTMLElement | undefined;
close: () => void;
remove: (asset: Asset, opts?: ObjectAny) => Asset;
select: (asset: Asset, complete?: boolean) => void;
options: AssetOpenOptions;
}
export interface AssetProps {
src: string;
[key: string]: unknown;
@ -108,5 +129,20 @@ export enum AssetsEvents {
}
/**{END_EVENTS}*/
export interface AssetsEventCallback {
[AssetsEvents.add]: EventCallbackAdd<Asset>;
[AssetsEvents.remove]: EventCallbackRemove<Asset>;
[AssetsEvents.removeBefore]: EventCallbackRemoveBefore<Asset>;
[AssetsEvents.update]: EventCallbackUpdate<Asset>;
[AssetsEvents.open]: [];
[AssetsEvents.close]: [];
[AssetsEvents.uploadStart]: [];
[AssetsEvents.uploadEnd]: [any];
[AssetsEvents.uploadError]: [Error];
[AssetsEvents.uploadResponse]: [any];
[AssetsEvents.custom]: [AssetsCustomData];
[AssetsEvents.all]: EventCallbackAll<AssetEvent, Asset>;
}
// need this to avoid the TS documentation generator to break
export default AssetsEvents;

6
packages/core/src/block_manager/index.ts

@ -36,11 +36,9 @@ import Block, { BlockProperties } from './model/Block';
import Blocks from './model/Blocks';
import Categories from '../abstract/ModuleCategories';
import Category, { getItemsByCategory } from '../abstract/ModuleCategory';
import { BlocksByCategory, BlocksEvents } from './types';
import { BlocksByCategory, BlocksCustomData, BlocksEvents } from './types';
import BlocksView from './view/BlocksView';
export type BlockEvent = `${BlocksEvents}`;
export default class BlockManager extends ItemManagerModule<BlockManagerConfig, Blocks> {
blocks: Blocks;
blocksVisible: Blocks;
@ -90,7 +88,7 @@ export default class BlockManager extends ItemManagerModule<BlockManagerConfig,
this.em.trigger(this.events.custom, this.__customData());
}
__customData() {
__customData(): BlocksCustomData {
const bhv = this.__getBehaviour();
return {
bm: this as BlockManager,

37
packages/core/src/block_manager/types.ts

@ -1,9 +1,29 @@
import { ItemsByCategory } from '../abstract/ModuleCategory';
import { AddOptions, RemoveOptions } from '../common';
import BlockManager from '.';
import Category, { CategoryProperties, ItemsByCategory } from '../abstract/ModuleCategory';
import {
AddOptions,
EventCallbackAdd,
EventCallbackAll,
EventCallbackRemove,
EventCallbackRemoveBefore,
EventCallbackUpdate,
} from '../common';
import Component from '../dom_components/model/Component';
import Block from './model/Block';
export interface BlocksByCategory extends ItemsByCategory<Block> {}
export interface BlocksCustomData {
bm: BlockManager;
blocks: Block[];
container: HTMLElement | undefined;
dragStart: (block: Block, ev?: Event) => void;
drag: (ev: Event) => void;
dragStop: (cancel?: boolean) => void;
}
export type BlockEvent = `${BlocksEvents}`;
/**{START_EVENTS}*/
export enum BlocksEvents {
/**
@ -79,9 +99,16 @@ export enum BlocksEvents {
/**{END_EVENTS}*/
export interface BlocksEventCallback {
[BlocksEvents.add]: [Block, AddOptions];
[BlocksEvents.remove]: [Block, RemoveOptions];
[BlocksEvents.update]: [Block, AddOptions];
[BlocksEvents.add]: EventCallbackAdd<Block>;
[BlocksEvents.remove]: EventCallbackRemove<Block>;
[BlocksEvents.removeBefore]: EventCallbackRemoveBefore<Block>;
[BlocksEvents.update]: EventCallbackUpdate<Block>;
[BlocksEvents.dragStart]: [Block, DragEvent?];
[BlocksEvents.drag]: [Block, DragEvent?];
[BlocksEvents.dragEnd]: [Component | undefined, Block];
[BlocksEvents.categoryUpdate]: [{ category: Category; changes: Partial<CategoryProperties>; options: AddOptions }];
[BlocksEvents.custom]: [BlocksCustomData];
[BlocksEvents.all]: EventCallbackAll<BlockEvent, Block>;
}
// need this to avoid the TS documentation generator to break

6
packages/core/src/common/index.ts

@ -105,3 +105,9 @@ export const DEFAULT_BOXRECT: BoxRect = {
};
export type PrevToNewIdMap = Record<string, string>;
export type EventCallbackAdd<M> = [M, AddOptions];
export type EventCallbackUpdate<M> = [M, AddOptions];
export type EventCallbackRemove<M> = [M, RemoveOptions];
export type EventCallbackRemoveBefore<M> = [M, RemoveFn: () => void, RemoveOptions];
export type EventCallbackAll<E, M> = [{ event: E; model?: M; options: ObjectAny }];

4
packages/core/src/data_sources/model/data_collection/types.ts

@ -9,7 +9,9 @@ export type DataCollectionDataSource = DataVariableProps;
export enum DataCollectionStateType {
currentIndex = 'currentIndex',
startIndex = 'startIndex',
prevItem = 'prevItem',
currentItem = 'currentItem',
nextItem = 'nextItem',
currentKey = 'currentKey',
endIndex = 'endIndex',
collectionId = 'collectionId',
@ -20,7 +22,9 @@ export enum DataCollectionStateType {
export interface DataCollectionState {
[DataCollectionStateType.currentIndex]: number;
[DataCollectionStateType.startIndex]: number;
[DataCollectionStateType.prevItem]?: DataVariableProps;
[DataCollectionStateType.currentItem]: DataVariableProps;
[DataCollectionStateType.nextItem]?: DataVariableProps;
[DataCollectionStateType.currentKey]: string | number;
[DataCollectionStateType.endIndex]: number;
[DataCollectionStateType.collectionId]: string;

2
packages/core/src/dom_components/model/ModelDataResolverWatchers.ts

@ -175,7 +175,7 @@ export class ModelDataResolverWatchers<T extends StyleableModelProperties> {
const keys = this.propertyWatcher.getValuesResolvingFromCollections();
const attributesKeys = this.attributeWatcher.getValuesResolvingFromCollections();
const combinedKeys = ['locked', 'layerable', keyDataValues, ...keys];
const combinedKeys = ['locked', 'layerable', ...keys];
const haveOverridenAttributes = Object.keys(attributesKeys).length;
if (haveOverridenAttributes) combinedKeys.push('attributes');

7
packages/core/src/editor/types.ts

@ -1,6 +1,5 @@
import { AssetEvent } from '../asset_manager/types';
import { BlockEvent } from '../block_manager';
import { BlocksEventCallback } from '../block_manager/types';
import { AssetEvent, AssetsEventCallback } from '../asset_manager/types';
import { BlockEvent, BlocksEventCallback } from '../block_manager/types';
import { CanvasEvent } from '../canvas';
import { CommandEvent } from '../commands';
import { LiteralUnion } from '../common';
@ -37,7 +36,7 @@ export type EditorConfigType = EditorConfig & { pStylePrefix?: string };
export type EditorModelParam<T extends keyof EditorModel, N extends number> = Parameters<EditorModel[T]>[N];
export interface EditorEventCallbacks extends BlocksEventCallback, DataSourcesEventCallback {
export interface EditorEventCallbacks extends AssetsEventCallback, BlocksEventCallback, DataSourcesEventCallback {
[key: string]: any[];
}

Loading…
Cancel
Save