Skip to content
This repository was archived by the owner on Jul 28, 2025. It is now read-only.

Commit b7133ad

Browse files
committed
first steps of formulas are working
1 parent 0653f0e commit b7133ad

File tree

6 files changed

+27
-49
lines changed

6 files changed

+27
-49
lines changed

src/DatabaseView.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ import {
2828
TFile,
2929
Menu,
3030
} from "obsidian";
31-
import { Literal } from "obsidian-dataview";
3231
import { createRoot, Root } from "react-dom/client";
3332
import DatabaseInfo from "services/DatabaseInfo";
3433
import { LOGGER } from "services/Logger";
@@ -46,7 +45,7 @@ export class DatabaseView extends TextFileView implements HoverParent {
4645
columns: Array<TableColumn>;
4746
shadowColumns: Array<TableColumn>;
4847
initial: InitialType;
49-
formulas: Record<string, (row: RowDataType) => Literal>;
48+
formulas: Record<string, unknown>;
5049

5150
constructor(leaf: WorkspaceLeaf, plugin: DBFolderPlugin) {
5251
super(leaf);

src/automations/AutomationsHelper.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { FormulaGenerator } from "automations/FormulaGenerator";
33

44
export async function obtainFormulasFromFolder(config: LocalSettings) {
55
const generator = new FormulaGenerator(config);
6-
generator.init();
7-
return await generator.generate_object(config);
6+
return await generator.generate_object();
87
}
98

Lines changed: 7 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,26 @@
11
import { FormulaFunctions } from "automations/formula_functions/FormulaFunctions";
22
import { IGenerateObject } from "automations/IGenerateObject";
3-
import * as obsidian_module from "obsidian";
43
import { LocalSettings } from "cdm/SettingsModel";
54
import { RowDataType } from "cdm/FolderModel";
65
import { Literal } from "obsidian-dataview";
7-
8-
export enum FunctionsMode {
9-
INTERNAL,
10-
USER_INTERNAL,
11-
}
12-
136
export class FormulaGenerator implements IGenerateObject {
147
public formula_functions: FormulaFunctions;
158

169
constructor(private config: LocalSettings) {
1710
this.formula_functions = new FormulaFunctions(config);
1811
}
1912

20-
async init(): Promise<void> {
21-
}
13+
private async generate_formula_functions(): Promise<Record<string, unknown>> {
2214

23-
additional_functions(): Record<string, unknown> {
24-
return {
25-
obsidian: obsidian_module,
26-
};
15+
return await this.formula_functions.generate_object(this.config);
2716
}
2817

29-
async generate_object(
30-
config: LocalSettings,
31-
functions_mode: FunctionsMode = FunctionsMode.USER_INTERNAL
32-
): Promise<Record<string, (row: RowDataType) => Literal>> {
18+
async generate_object(): Promise<Record<string, unknown>> {
3319
const final_object: Record<string, any> = {};
34-
const additional_functions_object = this.additional_functions();
35-
const internal_functions_object =
36-
await this.formula_functions.generate_object(config);
37-
let user_functions_object = {};
38-
39-
Object.assign(final_object, additional_functions_object);
40-
switch (functions_mode) {
41-
case FunctionsMode.INTERNAL:
42-
Object.assign(final_object, internal_functions_object);
43-
break;
44-
case FunctionsMode.USER_INTERNAL:
45-
user_functions_object =
46-
await this.formula_functions.generate_object(config);
47-
Object.assign(final_object, {
48-
...internal_functions_object,
49-
user: user_functions_object,
50-
});
51-
break;
52-
}
53-
20+
Object.assign(final_object, {
21+
js: await this.generate_formula_functions(),
22+
});
23+
console.log("sasdinal_object");
5424
return final_object;
5525
}
5626
}

src/automations/formula_functions/FormulaFunctions.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@ import { UserScriptFunctions } from "automations/formula_functions/ScriptFunctio
33
import { LocalSettings } from "cdm/SettingsModel";
44

55
export class FormulaFunctions implements IGenerateObject {
6-
private user_script_functions: UserScriptFunctions;
6+
private js_script_functions: UserScriptFunctions;
77

88
constructor(private config: LocalSettings) {
9-
this.user_script_functions = new UserScriptFunctions(config);
9+
this.js_script_functions = new UserScriptFunctions(config);
1010
}
1111

1212
async generate_object(
@@ -16,7 +16,7 @@ export class FormulaFunctions implements IGenerateObject {
1616

1717
if (config.formula_folder_path) {
1818
user_script_functions =
19-
await this.user_script_functions.generate_object();
19+
await this.js_script_functions.generate_object();
2020
}
2121

2222
return {

src/automations/formula_functions/ScriptFunctions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { App, Notice, TFile } from "obsidian";
1+
import { Notice, TFile } from "obsidian";
22
import { IGenerateObject } from "automations/IGenerateObject";
33
import { get_tfiles_from_folder } from "helpers/FileManagement";
44
import { LocalSettings } from "cdm/SettingsModel";

src/stateManagement/automations/handlers/RunFormulaHandlerAction.ts

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,27 @@ export default class RunFormulaHandlerAction extends AbstractTableAction<Automat
88
handle(tableActionResponse: TableActionResponse<AutomationState>): TableActionResponse<AutomationState> {
99
const { implementation, get } = tableActionResponse;
1010
implementation.info.runFormula = (input: string, row: RowDataType, ddbbConfig: LocalSettings) => {
11-
return this.evalInput(input, row, ddbbConfig, get().formula);
11+
return this.proxyFunction(input, row, ddbbConfig, get().formula);
1212
};
1313

1414
tableActionResponse.implementation = implementation;
1515
return this.goNext(tableActionResponse);
1616
}
17-
evalInput(input: string, row: RowDataType, ddbbConfig: LocalSettings, formulas: {
17+
evalInput(input: string, row: RowDataType, config: LocalSettings, db: {
1818
[key: string]: unknown;
1919
}): Literal {
2020
const dynamicJS = 'return `' + input + '`';
21-
const func = new Function('row', 'ddbbConfig', 'formulas', dynamicJS);
22-
return func(row, ddbbConfig, formulas);
21+
const func = new Function('row', 'ddbbConfig', 'db', dynamicJS);
22+
return func(row, config, db);
2323
}
24+
proxyFunction(input: string, row: RowDataType, config: LocalSettings, db: {
25+
[key: string]: unknown;
26+
}): Literal {
27+
try {
28+
return this.evalInput(input, row, config, db);
29+
} catch (e) {
30+
return `Error: ${e}`;
31+
}
32+
}
33+
2434
}

0 commit comments

Comments
 (0)