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

Commit eda0a21

Browse files
committed
new source from pages()
1 parent 36f04d7 commit eda0a21

File tree

6 files changed

+60
-3
lines changed

6 files changed

+60
-3
lines changed

src/helpers/Constants.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,7 @@ export const SourceDataTypes = Object.freeze({
291291
OUTGOING_LINK: 'outgoing_link',
292292
INCOMING_LINK: 'incoming_link',
293293
QUERY: 'query',
294+
QUERY_JS: 'query_js',
294295
});
295296

296297
export const CellSizeOptions = Object.freeze({

src/helpers/VaultManagement.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,13 +115,16 @@ export async function sourceDataviewPages(ddbbConfig: LocalSettings, folderPath:
115115
try {
116116
switch (ddbbConfig.source_data) {
117117
case SourceDataTypes.TAG:
118-
pagesResult = DataviewService.getDataviewAPI().pages(`${ddbbConfig.source_form_result.split(',').join(' OR ')}`);
118+
pagesResult = obtainPagesResult(`${ddbbConfig.source_form_result.split(',').join(' OR ')}`);
119119
break;
120120
case SourceDataTypes.INCOMING_LINK:
121-
pagesResult = DataviewService.getDataviewAPI().pages(`[[${ddbbConfig.source_form_result}]]`);
121+
pagesResult = obtainPagesResult(`[[${ddbbConfig.source_form_result}]]`);
122122
break;
123123
case SourceDataTypes.OUTGOING_LINK:
124-
pagesResult = DataviewService.getDataviewAPI().pages(`outgoing([[${ddbbConfig.source_form_result}]])`);
124+
pagesResult = obtainPagesResult(`outgoing([[${ddbbConfig.source_form_result}]])`);
125+
break;
126+
case SourceDataTypes.QUERY_JS:
127+
pagesResult = obtainPagesResult(ddbbConfig.source_form_result);
125128
break;
126129
case SourceDataTypes.QUERY:
127130
pagesResult = await obtainQueryResult(
@@ -130,6 +133,7 @@ export async function sourceDataviewPages(ddbbConfig: LocalSettings, folderPath:
130133
ddbbConfig.source_form_result)
131134
);
132135
break;
136+
133137
case SourceDataTypes.CURRENT_FOLDER_WITHOUT_SUBFOLDERS:
134138
if (!folderPath || folderPath === '/') {
135139
pagesResult = DataviewService.getDataviewAPI().pages()
@@ -151,6 +155,10 @@ export async function sourceDataviewPages(ddbbConfig: LocalSettings, folderPath:
151155
return pagesResult;
152156
}
153157

158+
function obtainPagesResult(pageQuery: string): DataArray<Record<string, Literal>> {
159+
return DataviewService.getDataviewAPI().pages(pageQuery);
160+
}
161+
154162
async function obtainQueryResult(query: string): Promise<DataArray<Record<string, Literal>>> {
155163
const result = await DataviewService.getDataviewAPI().query(query);
156164
if (!result.successful || result.value.type !== 'table') {

src/lang/locale/en.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export default {
3232
"outgoing_link": "Outgoing link",
3333
"incoming_link": "Incoming link",
3434
"query": "Dataview query",
35+
"query_js": "Dataview query (JS Pages)",
3536
/** COMMAND OPTIONS */
3637
"active_go_next_page": "Go to next page",
3738
"active_go_previous_page": "Go to previous page",
@@ -347,6 +348,12 @@ export default {
347348
"settings_source_form_query_button_tooltip": "Validate query",
348349
"settings_source_form_query_notice_validate": "Dataview query '{0}' is valid!",
349350
"settings_source_form_query_notice_error": "Dataview query '{0}' is invalid: {1}",
351+
"settings_source_form_query_js_title": "Pages dv query",
352+
"settings_source_form_query_js_desc": "Introduce `dv.pages()` content. Check dataview documentation for more info.",
353+
"settings_source_form_query_js_placeholder": "#myTag | `\"myFolderPath\"`",
354+
"settings_source_form_query_js_button_tooltip": "Validate pages content",
355+
"settings_source_form_query_js_notice_validate": "Pages content is valid!",
356+
"settings_source_form_query_js_notice_error": "The content of `dv.pages()` is invalid: {0}",
350357
"settings_source_form_destination_title": "Select destination folder",
351358
"settings_source_form_destination_desc": "Select the destination of new entries for this source",
352359
"settings_source_form_destination_placeholder": "Example: folder1/folder2",

src/lang/locale/es.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export default {
2626
"outgoing_link": "Enlace saliente",
2727
"incoming_link": "Enlace entrante",
2828
"query": "Consulta de Dataview",
29+
"query_js": "Consulta de Dataview (JS Pages)",
2930
/** COMMAND OPTIONS */
3031
"active_go_next_page": "Ir a la página siguiente",
3132
"active_go_previous_page": "Ir a la página anterior",

src/lang/locale/fr.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export default {
2626
"outgoing_link": "Lien sortant",
2727
"incoming_link": "Lien entrant",
2828
"query": "Requête Dataview",
29+
"query_js": "Requête JS Dataview (Pages)",
2930
/** COMMAND OPTIONS */
3031
"active_go_next_page": "Aller à la page suivante",
3132
"active_go_previous_page": "Aller à la page précédente",

src/settings/handlers/source/SourceFormHandler.ts

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,9 @@ export class SourceFormHandler extends AbstractSettingsHandler {
2929
case SourceDataTypes.QUERY:
3030
this.queryHandler(view, containerEl, columns);
3131
break;
32+
case SourceDataTypes.QUERY_JS:
33+
this.queryJsHandler(view, containerEl);
34+
break;
3235
default:
3336
//Current folder
3437
}
@@ -97,5 +100,41 @@ export class SourceFormHandler extends AbstractSettingsHandler {
97100
});
98101
destinationFolderSetting(view, containerEl);
99102
}
103+
104+
private queryJsHandler(view: DatabaseView, containerEl: HTMLElement) {
105+
const query_promise = async (value: string): Promise<void> => {
106+
if (this.sourceFormResultTimeout) {
107+
clearTimeout(this.sourceFormResultTimeout);
108+
}
109+
this.sourceFormResultTimeout = setTimeout(() => {
110+
// update settings
111+
view.diskConfig.yaml.config.source_form_result = value;
112+
view.diskConfig.updateConfig({ source_form_result: value });
113+
}, 1500);
114+
115+
};
116+
117+
new Setting(containerEl)
118+
.setName(t("settings_source_form_query_js_title"))
119+
.setDesc(t("settings_source_form_query_js_desc"))
120+
.addTextArea((textArea) => {
121+
textArea.inputEl.addClass(c("textarea-setting"));
122+
textArea.setValue(view.diskConfig.yaml.config.source_form_result);
123+
textArea.setPlaceholder(t("settings_source_form_query_js_placeholder"));
124+
textArea.onChange(query_promise);
125+
}).addExtraButton((cb) => {
126+
cb.setIcon("check")
127+
.setTooltip(t("settings_source_form_query_js_button_tooltip"))
128+
.onClick(async (): Promise<void> => {
129+
try {
130+
DataviewService.getDataviewAPI().pages(view.diskConfig.yaml.config.source_form_result);
131+
new Notice(t("settings_source_form_query_js_notice_validate"), 2000);
132+
} catch (e) {
133+
new Notice(t("settings_source_form_query_js_notice_error", e.message), 10000);
134+
}
135+
});
136+
});
137+
destinationFolderSetting(view, containerEl);
138+
}
100139
}
101140

0 commit comments

Comments
 (0)