mirror of
https://github.com/invoke-ai/InvokeAI.git
synced 2026-02-03 04:24:58 -05:00
feat(ui): improve typing on CanvasEntityAdapterBase
Use a generic to narrow the `type` field from `string` to a literal. Now you can do e.g. `adapter.type === 'control_layer_adapter'` and TS narrows the type.
This commit is contained in:
committed by
Kent Keirsey
parent
ff94146ee8
commit
bb2db3d6c3
@@ -15,9 +15,10 @@ import stableHash from 'stable-hash';
|
||||
import { assert } from 'tsafe';
|
||||
|
||||
export abstract class CanvasEntityAdapterBase<
|
||||
T extends CanvasRenderableEntityState = CanvasRenderableEntityState,
|
||||
T extends CanvasRenderableEntityState,
|
||||
U extends string,
|
||||
> extends CanvasModuleBase {
|
||||
readonly type: string;
|
||||
readonly type: U;
|
||||
readonly id: string;
|
||||
readonly path: string[];
|
||||
readonly manager: CanvasManager;
|
||||
@@ -91,7 +92,7 @@ export abstract class CanvasEntityAdapterBase<
|
||||
*/
|
||||
subscriptions = new Set<() => void>();
|
||||
|
||||
constructor(entityIdentifier: CanvasEntityIdentifier<T['type']>, manager: CanvasManager, adapterType: string) {
|
||||
constructor(entityIdentifier: CanvasEntityIdentifier<T['type']>, manager: CanvasManager, adapterType: U) {
|
||||
super();
|
||||
this.type = adapterType;
|
||||
this.id = entityIdentifier.id;
|
||||
|
||||
@@ -9,16 +9,17 @@ import type { CanvasControlLayerState, CanvasEntityIdentifier, Rect } from 'feat
|
||||
import type { GroupConfig } from 'konva/lib/Group';
|
||||
import { omit } from 'lodash-es';
|
||||
|
||||
export class CanvasEntityAdapterControlLayer extends CanvasEntityAdapterBase<CanvasControlLayerState> {
|
||||
static TYPE = 'control_layer_adapter';
|
||||
|
||||
export class CanvasEntityAdapterControlLayer extends CanvasEntityAdapterBase<
|
||||
CanvasControlLayerState,
|
||||
'control_layer_adapter'
|
||||
> {
|
||||
renderer: CanvasEntityObjectRenderer;
|
||||
bufferRenderer: CanvasEntityBufferObjectRenderer;
|
||||
transformer: CanvasEntityTransformer;
|
||||
filterer: CanvasEntityFilterer;
|
||||
|
||||
constructor(entityIdentifier: CanvasEntityIdentifier<'control_layer'>, manager: CanvasManager) {
|
||||
super(entityIdentifier, manager, CanvasEntityAdapterControlLayer.TYPE);
|
||||
super(entityIdentifier, manager, 'control_layer_adapter');
|
||||
|
||||
this.renderer = new CanvasEntityObjectRenderer(this);
|
||||
this.bufferRenderer = new CanvasEntityBufferObjectRenderer(this);
|
||||
|
||||
@@ -8,16 +8,17 @@ import type { CanvasEntityIdentifier, CanvasInpaintMaskState, Rect } from 'featu
|
||||
import type { GroupConfig } from 'konva/lib/Group';
|
||||
import { omit } from 'lodash-es';
|
||||
|
||||
export class CanvasEntityAdapterInpaintMask extends CanvasEntityAdapterBase<CanvasInpaintMaskState> {
|
||||
static TYPE = 'inpaint_mask_adapter';
|
||||
|
||||
export class CanvasEntityAdapterInpaintMask extends CanvasEntityAdapterBase<
|
||||
CanvasInpaintMaskState,
|
||||
'inpaint_mask_adapter'
|
||||
> {
|
||||
renderer: CanvasEntityObjectRenderer;
|
||||
bufferRenderer: CanvasEntityBufferObjectRenderer;
|
||||
transformer: CanvasEntityTransformer;
|
||||
filterer = undefined;
|
||||
|
||||
constructor(entityIdentifier: CanvasEntityIdentifier<'inpaint_mask'>, manager: CanvasManager) {
|
||||
super(entityIdentifier, manager, CanvasEntityAdapterInpaintMask.TYPE);
|
||||
super(entityIdentifier, manager, 'inpaint_mask_adapter');
|
||||
|
||||
this.renderer = new CanvasEntityObjectRenderer(this);
|
||||
this.bufferRenderer = new CanvasEntityBufferObjectRenderer(this);
|
||||
|
||||
@@ -9,16 +9,17 @@ import type { CanvasEntityIdentifier, CanvasRasterLayerState, Rect } from 'featu
|
||||
import type { GroupConfig } from 'konva/lib/Group';
|
||||
import { omit } from 'lodash-es';
|
||||
|
||||
export class CanvasEntityAdapterRasterLayer extends CanvasEntityAdapterBase<CanvasRasterLayerState> {
|
||||
static TYPE = 'raster_layer_adapter';
|
||||
|
||||
export class CanvasEntityAdapterRasterLayer extends CanvasEntityAdapterBase<
|
||||
CanvasRasterLayerState,
|
||||
'raster_layer_adapter'
|
||||
> {
|
||||
renderer: CanvasEntityObjectRenderer;
|
||||
bufferRenderer: CanvasEntityBufferObjectRenderer;
|
||||
transformer: CanvasEntityTransformer;
|
||||
filterer: CanvasEntityFilterer;
|
||||
|
||||
constructor(entityIdentifier: CanvasEntityIdentifier<'raster_layer'>, manager: CanvasManager) {
|
||||
super(entityIdentifier, manager, CanvasEntityAdapterRasterLayer.TYPE);
|
||||
super(entityIdentifier, manager, 'raster_layer_adapter');
|
||||
|
||||
this.renderer = new CanvasEntityObjectRenderer(this);
|
||||
this.bufferRenderer = new CanvasEntityBufferObjectRenderer(this);
|
||||
|
||||
@@ -8,16 +8,17 @@ import type { CanvasEntityIdentifier, CanvasRegionalGuidanceState, Rect } from '
|
||||
import type { GroupConfig } from 'konva/lib/Group';
|
||||
import { omit } from 'lodash-es';
|
||||
|
||||
export class CanvasEntityAdapterRegionalGuidance extends CanvasEntityAdapterBase<CanvasRegionalGuidanceState> {
|
||||
static TYPE = 'regional_guidance_adapter';
|
||||
|
||||
export class CanvasEntityAdapterRegionalGuidance extends CanvasEntityAdapterBase<
|
||||
CanvasRegionalGuidanceState,
|
||||
'regional_guidance_adapter'
|
||||
> {
|
||||
renderer: CanvasEntityObjectRenderer;
|
||||
bufferRenderer: CanvasEntityBufferObjectRenderer;
|
||||
transformer: CanvasEntityTransformer;
|
||||
filterer = undefined;
|
||||
|
||||
constructor(entityIdentifier: CanvasEntityIdentifier<'regional_guidance'>, manager: CanvasManager) {
|
||||
super(entityIdentifier, manager, CanvasEntityAdapterRegionalGuidance.TYPE);
|
||||
super(entityIdentifier, manager, 'regional_guidance_adapter');
|
||||
|
||||
this.renderer = new CanvasEntityObjectRenderer(this);
|
||||
this.bufferRenderer = new CanvasEntityBufferObjectRenderer(this);
|
||||
|
||||
Reference in New Issue
Block a user