mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2025-12-12 03:01:16 +00:00
feat: add shell config model
This commit is contained in:
parent
7c16bb1f9c
commit
b319286c48
113
docs/docs/api/model/config.md
Normal file
113
docs/docs/api/model/config.md
Normal file
@ -0,0 +1,113 @@
|
|||||||
|
---
|
||||||
|
title: Config
|
||||||
|
sidebar_position: 16
|
||||||
|
---
|
||||||
|
> **@types** [IPublicModelEngineConfig](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/model/engine-config.ts)<br/>
|
||||||
|
> **@since** v1.1.3
|
||||||
|
|
||||||
|
## 方法
|
||||||
|
### has
|
||||||
|
|
||||||
|
判断指定 key 是否有值
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
/**
|
||||||
|
* 判断指定 key 是否有值
|
||||||
|
* check if config has certain key configed
|
||||||
|
* @param key
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
has(key: string): boolean;
|
||||||
|
```
|
||||||
|
|
||||||
|
### get
|
||||||
|
|
||||||
|
获取指定 key 的值
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
/**
|
||||||
|
* 获取指定 key 的值
|
||||||
|
* get value by key
|
||||||
|
* @param key
|
||||||
|
* @param defaultValue
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
get(key: string, defaultValue?: any): any;
|
||||||
|
```
|
||||||
|
|
||||||
|
### set
|
||||||
|
|
||||||
|
设置指定 key 的值
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
/**
|
||||||
|
* 设置指定 key 的值
|
||||||
|
* set value for certain key
|
||||||
|
* @param key
|
||||||
|
* @param value
|
||||||
|
*/
|
||||||
|
set(key: string, value: any): void;
|
||||||
|
```
|
||||||
|
|
||||||
|
### setConfig
|
||||||
|
批量设值,set 的对象版本
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
/**
|
||||||
|
* 批量设值,set 的对象版本
|
||||||
|
* set multiple config key-values
|
||||||
|
* @param config
|
||||||
|
*/
|
||||||
|
setConfig(config: { [key: string]: any }): void;
|
||||||
|
```
|
||||||
|
|
||||||
|
### getPreference
|
||||||
|
获取全局 Preference, 用于管理全局浏览器侧用户 Preference,如 Panel 是否钉住
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
/**
|
||||||
|
* 获取全局 Preference, 用于管理全局浏览器侧用户 Preference,如 Panel 是否钉住
|
||||||
|
* get global user preference manager, which can be use to store
|
||||||
|
* user`s preference in user localstorage, such as a panel is pinned or not.
|
||||||
|
* @returns {IPublicModelPreference}
|
||||||
|
* @since v1.1.0
|
||||||
|
*/
|
||||||
|
getPreference(): IPublicModelPreference;
|
||||||
|
```
|
||||||
|
|
||||||
|
相关类型:[IPublicModelPreference](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/model/preference.ts)
|
||||||
|
|
||||||
|
## 事件
|
||||||
|
|
||||||
|
### onGot
|
||||||
|
获取指定 key 的值,函数回调模式,若多次被赋值,回调会被多次调用
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
/**
|
||||||
|
* 获取指定 key 的值,函数回调模式,若多次被赋值,回调会被多次调用
|
||||||
|
* set callback for event of value set for some key
|
||||||
|
* this will be called each time the value is set
|
||||||
|
* @param key
|
||||||
|
* @param fn
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
onGot(key: string, fn: (data: any) => void): IPublicTypeDisposable;
|
||||||
|
```
|
||||||
|
|
||||||
|
相关类型:[IPublicTypeDisposable](https://github.com/alibaba/lowcode-engine/blob/main/packages/types/src/shell/type/disposable.ts)
|
||||||
|
|
||||||
|
### onceGot
|
||||||
|
获取指定 key 的值,若此时还未赋值,则等待,若已有值,则直接返回值
|
||||||
|
> 注:此函数返回 Promise 实例,只会执行(fullfill)一次
|
||||||
|
|
||||||
|
```typescript
|
||||||
|
/**
|
||||||
|
* 获取指定 key 的值,若此时还未赋值,则等待,若已有值,则直接返回值
|
||||||
|
* 注:此函数返回 Promise 实例,只会执行(fullfill)一次
|
||||||
|
* wait until value of certain key is set, will only be
|
||||||
|
* triggered once.
|
||||||
|
* @param key
|
||||||
|
* @returns
|
||||||
|
*/
|
||||||
|
onceGot(key: string): Promise<any>;
|
||||||
|
```
|
||||||
@ -124,9 +124,7 @@ const VALID_ENGINE_OPTIONS = {
|
|||||||
type: 'array',
|
type: 'array',
|
||||||
description: '自定义 simulatorUrl 的地址',
|
description: '自定义 simulatorUrl 的地址',
|
||||||
},
|
},
|
||||||
/**
|
// 与 react-renderer 的 appHelper 一致,https://lowcode-engine.cn/site/docs/guide/expand/runtime/renderer#apphelper
|
||||||
* 与 react-renderer 的 appHelper 一致,https://lowcode-engine.cn/site/docs/guide/expand/runtime/renderer#apphelper
|
|
||||||
*/
|
|
||||||
appHelper: {
|
appHelper: {
|
||||||
type: 'object',
|
type: 'object',
|
||||||
description: '定义 utils 和 constants 等对象',
|
description: '定义 utils 和 constants 等对象',
|
||||||
@ -149,7 +147,6 @@ const VALID_ENGINE_OPTIONS = {
|
|||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const getStrictModeValue = (engineOptions: IPublicTypeEngineOptions, defaultValue: boolean): boolean => {
|
const getStrictModeValue = (engineOptions: IPublicTypeEngineOptions, defaultValue: boolean): boolean => {
|
||||||
if (!engineOptions || !isPlainObject(engineOptions)) {
|
if (!engineOptions || !isPlainObject(engineOptions)) {
|
||||||
return defaultValue;
|
return defaultValue;
|
||||||
@ -161,7 +158,8 @@ const getStrictModeValue = (engineOptions: IPublicTypeEngineOptions, defaultValu
|
|||||||
return engineOptions.enableStrictPluginMode;
|
return engineOptions.enableStrictPluginMode;
|
||||||
};
|
};
|
||||||
|
|
||||||
export interface IEngineConfigPrivate {
|
export interface IEngineConfig extends IPublicModelEngineConfig {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* if engineOptions.strictPluginMode === true, only accept propertied predefined in EngineOptions.
|
* if engineOptions.strictPluginMode === true, only accept propertied predefined in EngineOptions.
|
||||||
*
|
*
|
||||||
@ -176,8 +174,7 @@ export interface IEngineConfigPrivate {
|
|||||||
delWait(key: string, fn: any): void;
|
delWait(key: string, fn: any): void;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export class EngineConfig implements IEngineConfig {
|
||||||
export class EngineConfig implements IPublicModelEngineConfig, IEngineConfigPrivate {
|
|
||||||
private config: { [key: string]: any } = {};
|
private config: { [key: string]: any } = {};
|
||||||
|
|
||||||
private waits = new Map<
|
private waits = new Map<
|
||||||
|
|||||||
@ -43,6 +43,7 @@ import {
|
|||||||
Logger,
|
Logger,
|
||||||
Canvas,
|
Canvas,
|
||||||
Workspace,
|
Workspace,
|
||||||
|
Config,
|
||||||
} from '@alilc/lowcode-shell';
|
} from '@alilc/lowcode-shell';
|
||||||
import { isPlainObject } from '@alilc/lowcode-utils';
|
import { isPlainObject } from '@alilc/lowcode-utils';
|
||||||
import './modules/live-editing';
|
import './modules/live-editing';
|
||||||
@ -96,7 +97,7 @@ editor.set('project', project);
|
|||||||
editor.set('setters' as any, setters);
|
editor.set('setters' as any, setters);
|
||||||
editor.set('material', material);
|
editor.set('material', material);
|
||||||
editor.set('innerHotkey', innerHotkey);
|
editor.set('innerHotkey', innerHotkey);
|
||||||
const config = engineConfig;
|
const config = new Config(engineConfig);
|
||||||
const event = new Event(commonEvent, { prefix: 'common' });
|
const event = new Event(commonEvent, { prefix: 'common' });
|
||||||
const logger = new Logger({ level: 'warn', bizName: 'common' });
|
const logger = new Logger({ level: 'warn', bizName: 'common' });
|
||||||
const common = new Common(editor, innerSkeleton);
|
const common = new Common(editor, innerSkeleton);
|
||||||
|
|||||||
@ -10,6 +10,7 @@ import {
|
|||||||
SettingPropEntry,
|
SettingPropEntry,
|
||||||
SettingTopEntry,
|
SettingTopEntry,
|
||||||
Clipboard,
|
Clipboard,
|
||||||
|
Config,
|
||||||
} from './model';
|
} from './model';
|
||||||
import {
|
import {
|
||||||
Project,
|
Project,
|
||||||
@ -61,4 +62,5 @@ export {
|
|||||||
Workspace,
|
Workspace,
|
||||||
Clipboard,
|
Clipboard,
|
||||||
SimulatorHost,
|
SimulatorHost,
|
||||||
|
Config,
|
||||||
};
|
};
|
||||||
39
packages/shell/src/model/config.ts
Normal file
39
packages/shell/src/model/config.ts
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
import { IPublicModelEngineConfig, IPublicModelPreference, IPublicTypeDisposable } from '@alilc/lowcode-types';
|
||||||
|
import { configSymbol } from '../symbols';
|
||||||
|
import { IEngineConfig } from '@alilc/lowcode-editor-core';
|
||||||
|
|
||||||
|
export class Config implements IPublicModelEngineConfig {
|
||||||
|
private readonly [configSymbol]: IEngineConfig;
|
||||||
|
|
||||||
|
constructor(innerEngineConfig: IEngineConfig) {
|
||||||
|
this[configSymbol] = innerEngineConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
has(key: string): boolean {
|
||||||
|
return this[configSymbol].has(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
get(key: string, defaultValue?: any): any {
|
||||||
|
return this[configSymbol].get(key, defaultValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
set(key: string, value: any): void {
|
||||||
|
this[configSymbol].set(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
setConfig(config: { [key: string]: any }): void {
|
||||||
|
this[configSymbol].setConfig(config);
|
||||||
|
}
|
||||||
|
|
||||||
|
onceGot(key: string): Promise<any> {
|
||||||
|
return this[configSymbol].onceGot(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
onGot(key: string, fn: (data: any) => void): IPublicTypeDisposable {
|
||||||
|
return this[configSymbol].onGot(key, fn);
|
||||||
|
}
|
||||||
|
|
||||||
|
getPreference(): IPublicModelPreference {
|
||||||
|
return this[configSymbol].getPreference();
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -19,3 +19,4 @@ export * from './active-tracker';
|
|||||||
export * from './plugin-instance';
|
export * from './plugin-instance';
|
||||||
export * from './window';
|
export * from './window';
|
||||||
export * from './clipboard';
|
export * from './clipboard';
|
||||||
|
export * from './config';
|
||||||
|
|||||||
@ -32,3 +32,4 @@ export const pluginInstanceSymbol = Symbol('plugin-instance');
|
|||||||
export const resourceTypeSymbol = Symbol('resourceType');
|
export const resourceTypeSymbol = Symbol('resourceType');
|
||||||
export const resourceSymbol = Symbol('resource');
|
export const resourceSymbol = Symbol('resource');
|
||||||
export const clipboardSymbol = Symbol('clipboard');
|
export const clipboardSymbol = Symbol('clipboard');
|
||||||
|
export const configSymbol = Symbol('configSymbol');
|
||||||
|
|||||||
@ -1,3 +1,4 @@
|
|||||||
|
import { IPublicTypeDisposable } from '../type';
|
||||||
import { IPublicModelPreference } from './';
|
import { IPublicModelPreference } from './';
|
||||||
|
|
||||||
export interface IPublicModelEngineConfig {
|
export interface IPublicModelEngineConfig {
|
||||||
@ -52,7 +53,7 @@ export interface IPublicModelEngineConfig {
|
|||||||
* @param fn
|
* @param fn
|
||||||
* @returns
|
* @returns
|
||||||
*/
|
*/
|
||||||
onGot(key: string, fn: (data: any) => void): () => void;
|
onGot(key: string, fn: (data: any) => void): IPublicTypeDisposable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取全局 Preference, 用于管理全局浏览器侧用户 Preference,如 Panel 是否钉住
|
* 获取全局 Preference, 用于管理全局浏览器侧用户 Preference,如 Panel 是否钉住
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user