Skip to content
Snippets Groups Projects
Commit aaa342a3 authored by David Sehnal's avatar David Sehnal
Browse files

mol-state: transform params constraint

parent cf0d5673
No related branches found
No related tags found
No related merge requests found
...@@ -13,7 +13,7 @@ import { Transformer } from './transformer'; ...@@ -13,7 +13,7 @@ import { Transformer } from './transformer';
export { StateAction }; export { StateAction };
interface StateAction<A extends StateObject = StateObject, T = any, P = unknown> { interface StateAction<A extends StateObject = StateObject, T = any, P extends {} = {}> {
create(params: P): StateAction.Instance, create(params: P): StateAction.Instance,
readonly id: UUID, readonly id: UUID,
readonly definition: StateAction.Definition<A, T, P> readonly definition: StateAction.Definition<A, T, P>
...@@ -30,14 +30,14 @@ namespace StateAction { ...@@ -30,14 +30,14 @@ namespace StateAction {
params: any params: any
} }
export interface ApplyParams<A extends StateObject = StateObject, P = unknown> { export interface ApplyParams<A extends StateObject = StateObject, P extends {} = {}> {
cell: StateObjectCell, cell: StateObjectCell,
a: A, a: A,
state: State, state: State,
params: P params: P
} }
export interface Definition<A extends StateObject = StateObject, T = any, P = unknown> { export interface Definition<A extends StateObject = StateObject, T = any, P extends {} = {}> {
readonly from: StateObject.Ctor[], readonly from: StateObject.Ctor[],
readonly display?: { readonly name: string, readonly description?: string }, readonly display?: { readonly name: string, readonly description?: string },
...@@ -52,7 +52,7 @@ namespace StateAction { ...@@ -52,7 +52,7 @@ namespace StateAction {
isApplicable?(a: A, globalCtx: unknown): boolean isApplicable?(a: A, globalCtx: unknown): boolean
} }
export function create<A extends StateObject, T, P>(definition: Definition<A, T, P>): StateAction<A, T, P> { export function create<A extends StateObject, T, P extends {} = {}>(definition: Definition<A, T, P>): StateAction<A, T, P> {
const action: StateAction<A, T, P> = { const action: StateAction<A, T, P> = {
create(params) { return { action, params }; }, create(params) { return { action, params }; },
id: UUID.create22(), id: UUID.create22(),
......
...@@ -8,7 +8,7 @@ import { StateObject } from './object'; ...@@ -8,7 +8,7 @@ import { StateObject } from './object';
import { Transformer } from './transformer'; import { Transformer } from './transformer';
import { UUID } from 'mol-util'; import { UUID } from 'mol-util';
export interface Transform<A extends StateObject = StateObject, B extends StateObject = StateObject, P = unknown> { export interface Transform<A extends StateObject = StateObject, B extends StateObject = StateObject, P extends {} = {}> {
readonly parent: Transform.Ref, readonly parent: Transform.Ref,
readonly transformer: Transformer<A, B, P>, readonly transformer: Transformer<A, B, P>,
readonly props: Transform.Props, readonly props: Transform.Props,
...@@ -33,7 +33,7 @@ export namespace Transform { ...@@ -33,7 +33,7 @@ export namespace Transform {
props?: Props props?: Props
} }
export function create<A extends StateObject, B extends StateObject, P>(parent: Ref, transformer: Transformer<A, B, P>, params?: P, options?: Options): Transform<A, B, P> { export function create<A extends StateObject, B extends StateObject, P extends {} = {}>(parent: Ref, transformer: Transformer<A, B, P>, params?: P, options?: Options): Transform<A, B, P> {
const ref = options && options.ref ? options.ref : UUID.create22() as string as Ref; const ref = options && options.ref ? options.ref : UUID.create22() as string as Ref;
return { return {
parent, parent,
......
...@@ -10,7 +10,7 @@ import { Transform } from './transform'; ...@@ -10,7 +10,7 @@ import { Transform } from './transform';
import { ParamDefinition as PD } from 'mol-util/param-definition'; import { ParamDefinition as PD } from 'mol-util/param-definition';
import { StateAction } from './action'; import { StateAction } from './action';
export interface Transformer<A extends StateObject = StateObject, B extends StateObject = StateObject, P = unknown> { export interface Transformer<A extends StateObject = StateObject, B extends StateObject = StateObject, P extends {} = {}> {
apply(parent: Transform.Ref, params?: P, props?: Partial<Transform.Options>): Transform<A, B, P>, apply(parent: Transform.Ref, params?: P, props?: Partial<Transform.Options>): Transform<A, B, P>,
toAction(): StateAction<A, void, P>, toAction(): StateAction<A, void, P>,
readonly namespace: string, readonly namespace: string,
...@@ -29,14 +29,14 @@ export namespace Transformer { ...@@ -29,14 +29,14 @@ export namespace Transformer {
return !!obj && typeof (obj as Transformer).toAction === 'function' && typeof (obj as Transformer).apply === 'function'; return !!obj && typeof (obj as Transformer).toAction === 'function' && typeof (obj as Transformer).apply === 'function';
} }
export interface ApplyParams<A extends StateObject = StateObject, P = unknown> { export interface ApplyParams<A extends StateObject = StateObject, P extends {} = {}> {
a: A, a: A,
params: P, params: P,
/** A cache object that is purged each time the corresponding StateObject is removed or recreated. */ /** A cache object that is purged each time the corresponding StateObject is removed or recreated. */
cache: unknown cache: unknown
} }
export interface UpdateParams<A extends StateObject = StateObject, B extends StateObject = StateObject, P = unknown> { export interface UpdateParams<A extends StateObject = StateObject, B extends StateObject = StateObject, P extends {} = {}> {
a: A, a: A,
b: B, b: B,
oldParams: P, oldParams: P,
...@@ -56,7 +56,7 @@ export namespace Transformer { ...@@ -56,7 +56,7 @@ export namespace Transformer {
areEqual?(oldParams: P, newParams: P): boolean areEqual?(oldParams: P, newParams: P): boolean
} }
export interface Definition<A extends StateObject = StateObject, B extends StateObject = StateObject, P = unknown> { export interface Definition<A extends StateObject = StateObject, B extends StateObject = StateObject, P extends {} = {}> {
readonly name: string, readonly name: string,
readonly from: StateObject.Ctor[], readonly from: StateObject.Ctor[],
readonly to: StateObject.Ctor[], readonly to: StateObject.Ctor[],
...@@ -112,7 +112,7 @@ export namespace Transformer { ...@@ -112,7 +112,7 @@ export namespace Transformer {
return fromTypeIndex.get(type) || []; return fromTypeIndex.get(type) || [];
} }
export function create<A extends StateObject, B extends StateObject, P>(namespace: string, definition: Definition<A, B, P>) { export function create<A extends StateObject, B extends StateObject, P extends {} = {}>(namespace: string, definition: Definition<A, B, P>) {
const { name } = definition; const { name } = definition;
const id = `${namespace}.${name}` as Id; const id = `${namespace}.${name}` as Id;
...@@ -134,10 +134,10 @@ export namespace Transformer { ...@@ -134,10 +134,10 @@ export namespace Transformer {
} }
export function factory(namespace: string) { export function factory(namespace: string) {
return <A extends StateObject, B extends StateObject, P>(definition: Definition<A, B, P>) => create(namespace, definition); return <A extends StateObject, B extends StateObject, P extends {} = {}>(definition: Definition<A, B, P>) => create(namespace, definition);
} }
export const ROOT = create<any, any, any>('build-in', { export const ROOT = create<any, any, {}>('build-in', {
name: 'root', name: 'root',
from: [], from: [],
to: [], to: [],
......
...@@ -134,7 +134,7 @@ class TransientTree implements StateTree { ...@@ -134,7 +134,7 @@ class TransientTree implements StateTree {
} }
/** Calls Transform.definition.params.areEqual if available, otherwise uses shallowEqual to check if the params changed */ /** Calls Transform.definition.params.areEqual if available, otherwise uses shallowEqual to check if the params changed */
setParams(ref: Transform.Ref, params: unknown) { setParams(ref: Transform.Ref, params: any) {
ensurePresent(this.transforms, ref); ensurePresent(this.transforms, ref);
const transform = this.transforms.get(ref)!; const transform = this.transforms.get(ref)!;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment