ConceptPortal-public/rsconcept/frontend/src/models/miscellaneousAPI.ts

57 lines
1.6 KiB
TypeScript
Raw Normal View History

/**
2023-12-26 14:23:51 +03:00
* Module: API for miscellaneous frontend model types. Future targets for refactoring aimed at extracting modules.
*/
import { DependencyMode, FontStyle, GraphSizing } from './miscellaneous';
import { IConstituenta, IRSForm } from './rsform';
2024-03-26 12:49:38 +03:00
/**
* Create style name from {@link FontStyle}.
*/
export function getFontClassName(style: FontStyle): string {
return `font-${style}`;
}
/**
* Filter list of {@link ILibraryItem} to a given graph query.
*/
export function applyGraphFilter(target: IRSForm, start: number, mode: DependencyMode): IConstituenta[] {
if (mode === DependencyMode.ALL) {
2023-12-28 14:04:44 +03:00
return target.items;
}
const ids: number[] | undefined = (() => {
switch (mode) {
case DependencyMode.OUTPUTS: {
return target.graph.nodes.get(start)?.outputs;
}
case DependencyMode.INPUTS: {
return target.graph.nodes.get(start)?.inputs;
}
case DependencyMode.EXPAND_OUTPUTS: {
return target.graph.expandAllOutputs([start]);
}
case DependencyMode.EXPAND_INPUTS: {
return target.graph.expandAllInputs([start]);
}
2023-12-28 14:04:44 +03:00
}
return undefined;
})();
if (ids) {
return target.items.filter(cst => ids.find(id => id === cst.id));
} else {
return target.items;
}
}
2024-04-07 19:22:19 +03:00
/**
* Apply {@link GraphSizing} to a given {@link IConstituenta}.
*/
export function applyNodeSizing(target: IConstituenta, sizing: GraphSizing): number | undefined {
if (sizing === 'none') {
return undefined;
} else if (sizing === 'complex') {
return target.is_simple_expression ? 1 : 2;
} else {
return target.parent ? 1 : 2;
}
}