Skip to content

Commit 180eea0

Browse files
committed
chore: context mixins
1 parent 1c1793b commit 180eea0

12 files changed

+162
-302
lines changed

dist/js/entity/index.d.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
import { InMemoryEntity } from "./in_memory";
2-
import { ContextAndRenderFieldsMixin } from "./mixins/context";
32
import { RuntimeContextFieldMixin } from "./mixins/context_runtime";
4-
import { FlowchartEntityMixin, FlowchartItemMixin } from "./mixins/flowchart";
53
import { DefaultableInMemoryEntity, HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity, HasMetadataNamedDefaultableInMemoryEntity, NamedDefaultableInMemoryEntity, NamedInMemoryEntity } from "./other";
64
import { InMemoryEntitySet } from "./set";
75
import { ENTITY_SET_TYPES } from "./set/enums";
86
import { constructEntitySetFactoryByConfig } from "./set/factory";
97
import { InMemoryEntityInSetMixin, InMemoryEntitySetMixin } from "./set/mixins";
108
import { OrderedInMemoryEntityInSetMixin, OrderedInMemoryEntitySetMixin } from "./set/ordered/mixins";
119
import * as selectorsForEntitySet from "./set/selectors";
12-
export { InMemoryEntity, NamedInMemoryEntity, DefaultableInMemoryEntity, NamedDefaultableInMemoryEntity, HasMetadataNamedDefaultableInMemoryEntity, HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity, RuntimeContextFieldMixin, InMemoryEntitySet, ENTITY_SET_TYPES, constructEntitySetFactoryByConfig, selectorsForEntitySet, InMemoryEntitySetMixin, InMemoryEntityInSetMixin, OrderedInMemoryEntitySetMixin, OrderedInMemoryEntityInSetMixin, ContextAndRenderFieldsMixin, FlowchartEntityMixin, FlowchartItemMixin, };
10+
export { InMemoryEntity, NamedInMemoryEntity, DefaultableInMemoryEntity, NamedDefaultableInMemoryEntity, HasMetadataNamedDefaultableInMemoryEntity, HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity, RuntimeContextFieldMixin, InMemoryEntitySet, ENTITY_SET_TYPES, constructEntitySetFactoryByConfig, selectorsForEntitySet, InMemoryEntitySetMixin, InMemoryEntityInSetMixin, OrderedInMemoryEntitySetMixin, OrderedInMemoryEntityInSetMixin, };

dist/js/entity/index.js

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,16 +33,11 @@ var __importStar = (this && this.__importStar) || (function () {
3333
};
3434
})();
3535
Object.defineProperty(exports, "__esModule", { value: true });
36-
exports.FlowchartItemMixin = exports.FlowchartEntityMixin = exports.ContextAndRenderFieldsMixin = exports.OrderedInMemoryEntityInSetMixin = exports.OrderedInMemoryEntitySetMixin = exports.InMemoryEntityInSetMixin = exports.InMemoryEntitySetMixin = exports.selectorsForEntitySet = exports.constructEntitySetFactoryByConfig = exports.ENTITY_SET_TYPES = exports.InMemoryEntitySet = exports.RuntimeContextFieldMixin = exports.HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity = exports.HasMetadataNamedDefaultableInMemoryEntity = exports.NamedDefaultableInMemoryEntity = exports.DefaultableInMemoryEntity = exports.NamedInMemoryEntity = exports.InMemoryEntity = void 0;
36+
exports.OrderedInMemoryEntityInSetMixin = exports.OrderedInMemoryEntitySetMixin = exports.InMemoryEntityInSetMixin = exports.InMemoryEntitySetMixin = exports.selectorsForEntitySet = exports.constructEntitySetFactoryByConfig = exports.ENTITY_SET_TYPES = exports.InMemoryEntitySet = exports.RuntimeContextFieldMixin = exports.HasConsistencyChecksHasMetadataNamedDefaultableInMemoryEntity = exports.HasMetadataNamedDefaultableInMemoryEntity = exports.NamedDefaultableInMemoryEntity = exports.DefaultableInMemoryEntity = exports.NamedInMemoryEntity = exports.InMemoryEntity = void 0;
3737
const in_memory_1 = require("./in_memory");
3838
Object.defineProperty(exports, "InMemoryEntity", { enumerable: true, get: function () { return in_memory_1.InMemoryEntity; } });
39-
const context_1 = require("./mixins/context");
40-
Object.defineProperty(exports, "ContextAndRenderFieldsMixin", { enumerable: true, get: function () { return context_1.ContextAndRenderFieldsMixin; } });
4139
const context_runtime_1 = require("./mixins/context_runtime");
4240
Object.defineProperty(exports, "RuntimeContextFieldMixin", { enumerable: true, get: function () { return context_runtime_1.RuntimeContextFieldMixin; } });
43-
const flowchart_1 = require("./mixins/flowchart");
44-
Object.defineProperty(exports, "FlowchartEntityMixin", { enumerable: true, get: function () { return flowchart_1.FlowchartEntityMixin; } });
45-
Object.defineProperty(exports, "FlowchartItemMixin", { enumerable: true, get: function () { return flowchart_1.FlowchartItemMixin; } });
4641
// import { RuntimeItemsMixin } from "./mixins/runtime_items";
4742
const other_1 = require("./other");
4843
Object.defineProperty(exports, "DefaultableInMemoryEntity", { enumerable: true, get: function () { return other_1.DefaultableInMemoryEntity; } });
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types";
2+
import type { InMemoryEntity } from "../in_memory";
3+
export type Context = AnyObject;
4+
export type ContextAndRenderFields = {
5+
context?: Context;
6+
updateContext(ctx: Context): void;
7+
getPersistentContext(): Context | undefined;
8+
updatePersistentContext(ctx: Context): void;
9+
getCombinedContext(): Context;
10+
render(ctx: Context): void;
11+
};
12+
type AbstractBase = {
13+
render(ctx: Context): void;
14+
};
15+
export declare function contextAndRenderFieldsMixin<T extends InMemoryEntity & AbstractBase>(item: T): asserts item is T & ContextAndRenderFields;
16+
export {};
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
"use strict";
2+
Object.defineProperty(exports, "__esModule", { value: true });
3+
exports.contextAndRenderFieldsMixin = contextAndRenderFieldsMixin;
4+
function contextAndRenderFieldsMixin(item) {
5+
// @ts-expect-error
6+
const properties = {
7+
updateContext(ctx) {
8+
this.context = { ...this.context, ...ctx };
9+
},
10+
getPersistentContext() {
11+
return this.prop("context");
12+
},
13+
updatePersistentContext(ctx) {
14+
this.setProp("context", { ...ctx });
15+
},
16+
getCombinedContext() {
17+
return { ...this.getPersistentContext(), ...this.context };
18+
},
19+
};
20+
Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties));
21+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import type { InMemoryEntity } from "../in_memory";
2+
export interface ContextProvider {
3+
domain: string;
4+
}
5+
type ImportantSettingsProvider = {
6+
contextProviders: ContextProvider[];
7+
important: object;
8+
setImportant(key: string, value: unknown): void;
9+
importantSettingsProviders: ContextProvider[];
10+
isImportantEdited: boolean | undefined;
11+
};
12+
export declare function importantSettingsProviderMixin<T extends InMemoryEntity>(item: T): asserts item is T & ImportantSettingsProvider;
13+
export {};
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
"use strict";
2+
Object.defineProperty(exports, "__esModule", { value: true });
3+
exports.importantSettingsProviderMixin = importantSettingsProviderMixin;
4+
const clone_1 = require("../../utils/clone");
5+
function importantSettingsProviderMixin(item) {
6+
// @ts-expect-error
7+
const properties = {
8+
contextProviders: [],
9+
get important() {
10+
return (0, clone_1.deepClone)(this._json.important || {});
11+
},
12+
setImportant(key, value) {
13+
this.setProp("important", { [key]: value });
14+
},
15+
get importantSettingsProviders() {
16+
return this.contextProviders.filter((p) => p.domain === "important");
17+
},
18+
get isImportantEdited() {
19+
return this.prop("important.isEdited");
20+
},
21+
set isImportantEdited(bool) {
22+
this.setProp("important", Object.assign(this.important, { isEdited: bool }));
23+
},
24+
};
25+
Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties));
26+
}

src/js/entity/index.ts

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
import { InMemoryEntity } from "./in_memory";
2-
import { ContextAndRenderFieldsMixin } from "./mixins/context";
32
import { RuntimeContextFieldMixin } from "./mixins/context_runtime";
4-
import { FlowchartEntityMixin, FlowchartItemMixin } from "./mixins/flowchart";
53
// import { RuntimeItemsMixin } from "./mixins/runtime_items";
64
import {
75
DefaultableInMemoryEntity,
@@ -43,7 +41,4 @@ export {
4341
InMemoryEntityInSetMixin,
4442
OrderedInMemoryEntitySetMixin,
4543
OrderedInMemoryEntityInSetMixin,
46-
ContextAndRenderFieldsMixin,
47-
FlowchartEntityMixin,
48-
FlowchartItemMixin,
4944
};
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
import type { AnyObject } from "@mat3ra/esse/dist/js/esse/types";
2+
3+
import type { InMemoryEntity } from "../in_memory";
4+
5+
export type Context = AnyObject;
6+
7+
export type ContextAndRenderFields = {
8+
context?: Context;
9+
updateContext(ctx: Context): void;
10+
getPersistentContext(): Context | undefined;
11+
updatePersistentContext(ctx: Context): void;
12+
getCombinedContext(): Context;
13+
render(ctx: Context): void;
14+
};
15+
16+
type AbstractBase = {
17+
render(ctx: Context): void;
18+
};
19+
20+
export function contextAndRenderFieldsMixin<T extends InMemoryEntity & AbstractBase>(
21+
item: T,
22+
): asserts item is T & ContextAndRenderFields {
23+
// @ts-expect-error
24+
const properties: InMemoryEntity & ContextAndRenderFields = {
25+
updateContext(ctx: Context) {
26+
this.context = { ...this.context, ...ctx };
27+
},
28+
getPersistentContext() {
29+
return this.prop<Context>("context");
30+
},
31+
updatePersistentContext(ctx: Context) {
32+
this.setProp("context", { ...ctx });
33+
},
34+
getCombinedContext() {
35+
return { ...this.getPersistentContext(), ...this.context };
36+
},
37+
};
38+
39+
Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties));
40+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import { deepClone } from "../../utils/clone";
2+
import type { InMemoryEntity } from "../in_memory";
3+
4+
export interface ContextProvider {
5+
domain: string;
6+
}
7+
8+
type ImportantSettingsProvider = {
9+
contextProviders: ContextProvider[];
10+
important: object;
11+
setImportant(key: string, value: unknown): void;
12+
importantSettingsProviders: ContextProvider[];
13+
isImportantEdited: boolean | undefined;
14+
};
15+
16+
export function importantSettingsProviderMixin<T extends InMemoryEntity>(
17+
item: T,
18+
): asserts item is T & ImportantSettingsProvider {
19+
// @ts-expect-error
20+
const properties: InMemoryEntity & ImportantSettingsProvider = {
21+
contextProviders: [],
22+
get important() {
23+
return deepClone(this._json.important || {});
24+
},
25+
26+
setImportant(key: string, value: unknown) {
27+
this.setProp("important", { [key]: value });
28+
},
29+
30+
get importantSettingsProviders() {
31+
return this.contextProviders.filter((p) => p.domain === "important");
32+
},
33+
34+
get isImportantEdited() {
35+
return this.prop<boolean>("important.isEdited");
36+
},
37+
38+
set isImportantEdited(bool) {
39+
this.setProp("important", Object.assign(this.important, { isEdited: bool }));
40+
},
41+
};
42+
43+
Object.defineProperties(item, Object.getOwnPropertyDescriptors(properties));
44+
}

src/js/entity/mixins/context.ts

Lines changed: 0 additions & 108 deletions
This file was deleted.

0 commit comments

Comments
 (0)