Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

UI #56

Merged
merged 3 commits into from
Oct 3, 2023
Merged

UI #56

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "strx",
"version": "0.0.13",
"version": "0.0.14",
"description": "Unified Turing Machine",
"main": "index.js",
"scripts": {
Expand Down
9 changes: 8 additions & 1 deletion src/concepts/axium/qualities/addConceptsFromQue.quality.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Subject, Subscriber } from 'rxjs';
import { Observable, Subject, Subscriber, catchError } from 'rxjs';
import { defaultMethodCreator } from '../../../model/concept';
import { AxiumState } from '../axium.concept';
import { Action, ActionType } from '../../../model/action';
Expand All @@ -18,6 +18,13 @@ function addConceptsFromQueReducer(state: AxiumState, _ : Action) {
concept.qualities.forEach(quality => {
if (quality.methodCreator) {
[quality.method, quality.subject] = quality.methodCreator(state.subConcepts$);
quality.method.pipe(
catchError((err: unknown, caught: Observable<Action>) => {
if (state.logging) {
console.error('METHOD ERROR', err);
}
return caught;
}));
const methodSub = quality.method.subscribe((action: Action) => {
const action$ = state.action$ as Subject<Action>;
blockingMethodSubscription(action$, action);
Expand Down
2 changes: 1 addition & 1 deletion src/concepts/axium/qualities/setBlockingMode.quality.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { Subject, Subscriber } from 'rxjs';
import { Observable, Subject, Subscriber, catchError } from 'rxjs';
import { Concept, defaultMethodCreator } from '../../../model/concept';
import { Action, ActionType } from '../../../model/action';
import { AxiumState } from '../axium.concept';
Expand Down
15 changes: 9 additions & 6 deletions src/model/axium.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
catchError,
} from 'rxjs';
import { Action, createAction, createCacheSemaphores } from './action';
import { ActionNode, ActionStrategy, ActionStrategyParameters, createStrategy, puntStrategy, strategyBegin } from './actionStrategy';
import { strategyBegin } from './actionStrategy';
import { Concept, Mode } from './concept';
import {
createAxiumConcept,
Expand All @@ -19,7 +19,6 @@ import {
AppendActionListToDialogPayload,
axiumAppendActionListToDialogType
} from '../concepts/axium/qualities/appendActionListToDialog.quality';
import { axiumConcludeType } from '../concepts/axium/qualities/conclude.quality';

export const blockingMethodSubscription = (action$: Subject<Action>, action: Action) => {
if (
Expand Down Expand Up @@ -70,16 +69,22 @@ export const defaultMethodSubscription = (action$: Subject<Action>, action: Acti
};

export function createAxium(initialConcepts: Concept[], logging?: boolean, storeDialog?: boolean) {
// const action$: Subject<Action> = new Subject();
const concepts: Concept[] = [createAxiumConcept(logging, storeDialog), ...initialConcepts];
let axiumState = concepts[0].state as AxiumState;
axiumState.cachedSemaphores = createCacheSemaphores(concepts);
concepts.forEach((concept, _index) => {
concept.qualities.forEach((quality, index) => {
concept.qualities.forEach(quality => {
if (quality.methodCreator) {
const [method, subject] = quality.methodCreator(axiumState.subConcepts$);
quality.method = method;
quality.subject = subject;
quality.method.pipe(
catchError((err: unknown, caught: Observable<Action>) => {
if (axiumState.logging) {
console.error('METHOD ERROR', err);
}
return caught;
}));
const methodSub = quality.method.subscribe((action: Action) => {
blockingMethodSubscription(axiumState.action$, action);
}) as Subscriber<Action>;
Expand Down Expand Up @@ -107,7 +112,6 @@ export function createAxium(initialConcepts: Concept[], logging?: boolean, store
// As Such is a Unique Principle in the Scope of State Management
// This will also allow for Actions to be added to the Stream to Update to most Recent Values
catchError((err: unknown, caught: Observable<[Action, Concept[]]>) => {
// Will need to Refine this Function Continuously
if (axiumState.logging) {
console.error('ACTION STREAM ERROR', err);
}
Expand All @@ -116,7 +120,6 @@ export function createAxium(initialConcepts: Concept[], logging?: boolean, store
)
.subscribe(([action, _concepts]: [Action, Concept[]]) => {
// Would be notifying methods
// console.log('Check Length', concepts.length)
const _axiumState = _concepts[0].state as AxiumState;
const modeIndex = _axiumState.modeIndex;
const modes = _concepts[0].mode as Mode[];
Expand Down