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

Commit 9651b78

Browse files
committed
rollup key selector skeleton
1 parent 4c5418c commit 9651b78

File tree

2 files changed

+53
-11
lines changed

2 files changed

+53
-11
lines changed

src/components/modals/columnSettings/handlers/automations/RollupInputHandler.ts

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@ import { Setting } from "obsidian";
44
import { add_toggle } from "settings/SettingsComponents";
55
import { StringSuggest } from "settings/suggesters/StringSuggester";
66
import { InputType, ROLLUP_ACTIONS } from "helpers/Constants";
7+
import { recordFieldsFromRelation } from "helpers/RelationHelper";
78
export class RollupInputHandler extends AbstractHandlerClass<ColumnSettingsHandlerResponse> {
89
settingTitle: string = 'rollup properties';
910
handle(columnHandlerResponse: ColumnSettingsHandlerResponse): ColumnSettingsHandlerResponse {
1011
const { column, containerEl, columnSettingsManager } = columnHandlerResponse;
11-
const { view, columnsState } = columnSettingsManager.modal;
12+
const { view, columnsState, configState } = columnSettingsManager.modal;
1213
const { config } = column
1314

1415
const persist_rollup_toggle_promise = async (value: boolean): Promise<void> => {
@@ -34,7 +35,7 @@ export class RollupInputHandler extends AbstractHandlerClass<ColumnSettingsHandl
3435
columnSettingsManager.modal.enableReset = true;
3536
};
3637
new Setting(containerEl)
37-
.setName("Select relation to rollup")
38+
.setName("Select relation column")
3839
.setDesc('Select from the existing columns to rollup')
3940
.addSearch((cb) => {
4041
new StringSuggest(
@@ -70,15 +71,37 @@ export class RollupInputHandler extends AbstractHandlerClass<ColumnSettingsHandl
7071
.onChange(rollup_action_promise);
7172
});
7273
// TODO select key column (if action allows it)
73-
// Enable persist rollup toggle
74-
add_toggle(
75-
containerEl,
76-
"Persist rollup output",
77-
"Enable/disable to persist rollup output on your notes (Only persisted rollups could be searchable and sortable)",
78-
config.persist_rollup,
79-
persist_rollup_toggle_promise
80-
);
74+
const rollup_key_promise = async (value: string): Promise<void> => {
75+
// Persist on disk
76+
await view.diskConfig.updateColumnConfig(column.id, {
77+
rollup_key: value
78+
});
79+
columnSettingsManager.modal.enableReset = true;
80+
};
81+
recordFieldsFromRelation("Incidencias/ropa/clothing ddbb.md", configState.info.getLocalSettings()).then((fields) => {
82+
new Setting(containerEl)
83+
.setName("Select property of relation")
84+
.setDesc('Select the property to rollup from the relation')
85+
.addSearch((cb) => {
86+
new StringSuggest(
87+
cb.inputEl,
88+
fields
89+
);
90+
cb.setPlaceholder("Select property...")
91+
.setValue(column.config.rollup_key)
92+
.onChange(rollup_key_promise);
93+
});
94+
// Enable persist rollup toggle
95+
add_toggle(
96+
containerEl,
97+
"Persist rollup output",
98+
"Enable/disable to persist rollup output on your notes (Only persisted rollups could be searchable and sortable)",
99+
config.persist_rollup,
100+
persist_rollup_toggle_promise
101+
);
81102

82-
return this.goNext(columnHandlerResponse);
103+
return this.goNext(columnHandlerResponse);
104+
});
105+
return null;
83106
}
84107
}

src/helpers/RelationHelper.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,4 +38,23 @@ export async function recordRowsFromRelation(ddbbPath: string, ddbbConfig: Local
3838
relationRows[file.path] = file.name;
3939
});
4040
return relationRows;
41+
}
42+
43+
export async function recordFieldsFromRelation(ddbbPath: string, ddbbConfig: LocalSettings): Promise<Record<string, string>> {
44+
const relationFields: Record<string, string> = {};
45+
const ddbbFile = resolve_tfile(ddbbPath);
46+
const ddbbInfo = new DatabaseInfo(ddbbFile);
47+
ddbbInfo.initDatabaseconfigYaml(ddbbConfig);
48+
const ddbbRows = await sourceDataviewPages(ddbbConfig, ddbbFile.parent.path);
49+
// get unique fields from all rows
50+
ddbbRows.forEach((page) => {
51+
// iterate over all fields in the row
52+
Object.keys(page).forEach((key) => {
53+
if (relationFields[key] === undefined) {
54+
relationFields[key] = key;
55+
}
56+
});
57+
}
58+
);
59+
return relationFields;
4160
}

0 commit comments

Comments
 (0)