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

Commit e63dc69

Browse files
committed
Merge branch 'metadata_filters'
2 parents b3062b0 + 7f5fdb6 commit e63dc69

File tree

5 files changed

+77
-65
lines changed

5 files changed

+77
-65
lines changed

src/components/modals/filters/handlers/AtomicFilterComponent.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ const AtomicFilterComponent = (props: AtomicFilterComponentProps) => {
3535
const onchangeExistedColumnHandler =
3636
(conditionIndex: number[], level: number) =>
3737
(event: SelectChangeEvent<string>, child: React.ReactNode) => {
38+
console.log("onchangeExistedColumnHandler");
3839
commonModifyFilter(
3940
conditionIndex,
4041
level,

src/components/modals/filters/handlers/ExistedColumnSelectorComponent.tsx

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import FormControl from "@mui/material/FormControl";
2-
import MenuItem from "@mui/material/MenuItem";
32
import Select, { SelectChangeEvent } from "@mui/material/Select";
43
import { StyleVariables } from "helpers/Constants";
54
import React from "react";
@@ -22,6 +21,7 @@ const ExistedColumnSelectorComponent = (selectorProps: {
2221
key={`FormControl-existedColumnSelector-${level}-${recursiveIndex[level]}`}
2322
>
2423
<Select
24+
native
2525
value={currentCol}
2626
size="small"
2727
key={`Select-existedColumnSelector-${level}-${recursiveIndex[level]}`}
@@ -39,16 +39,26 @@ const ExistedColumnSelectorComponent = (selectorProps: {
3939
},
4040
}}
4141
>
42-
{possibleColumns.map((key, index) => {
43-
return (
44-
<MenuItem
45-
value={key}
46-
key={`MenuItem-${index}-existedColumnSelector-${key}--${level}-${recursiveIndex[level]}}`}
47-
>
48-
{key}
49-
</MenuItem>
50-
);
51-
})}
42+
<optgroup label="Fields from notes">
43+
{possibleColumns.map((key, index) => {
44+
return (
45+
<option
46+
value={key}
47+
key={`MenuItem-${index}-existedColumnSelector-${key}--${level}-${recursiveIndex[level]}}`}
48+
>
49+
{key}
50+
</option>
51+
);
52+
})}
53+
</optgroup>
54+
<optgroup label="Metadata Fields">
55+
<option
56+
value={"__filename__"}
57+
key={`MenuItem-Metadata-filename--${level}-${recursiveIndex[level]}`}
58+
>
59+
Filename
60+
</option>
61+
</optgroup>
5262
</Select>
5363
</FormControl>
5464
);

src/components/modals/filters/handlers/OperatorSelectorComponent.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import { MenuItem } from "@mui/material";
21
import FormControl from "@mui/material/FormControl";
32
import Select, { SelectChangeEvent } from "@mui/material/Select";
43
import { OperatorFilter, StyleVariables } from "helpers/Constants";
54
import { t } from "lang/helpers";
5+
import en from "lang/locale/en";
66
import React from "react";
77

88
const OperatorSelectorComponent = (selectorProps: {
@@ -19,6 +19,7 @@ const OperatorSelectorComponent = (selectorProps: {
1919
return (
2020
<FormControl fullWidth>
2121
<Select
22+
native
2223
value={currentOp}
2324
size="small"
2425
onChange={onChange(recursiveIndex, level)}
@@ -37,12 +38,12 @@ const OperatorSelectorComponent = (selectorProps: {
3738
>
3839
{Object.entries(OperatorFilter).map(([key, value], index) => {
3940
return (
40-
<MenuItem
41+
<option
4142
value={key}
4243
key={`MenuItem-${index}-OperatorSelector-${value[0]}-${level}-${recursiveIndex[level]}`}
4344
>
44-
{t(value[1] as any)}
45-
</MenuItem>
45+
{t(value[1] as keyof typeof en)}
46+
</option>
4647
);
4748
})}
4849
</Select>

src/helpers/VaultManagement.ts

Lines changed: 49 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,6 @@ export async function obtainAllPossibleRows(folderPath: string, ddbbConfig: Loca
9797
LOGGER.debug(`=> obtainAllPossibleRows. folderPath:${folderPath}`);
9898
const rows: Array<RowDataType> = [];
9999
let folderFiles = await sourceDataviewPages(ddbbConfig, folderPath, columns);
100-
folderFiles = folderFiles.where(p => !p[DatabaseCore.FRONTMATTER_KEY]);
101100
// Config filters asociated with the database
102101
if (filters.enabled && filters.conditions.length > 0) {
103102
folderFiles = folderFiles.where(p => tableFilter(filters.conditions, p, ddbbConfig));
@@ -113,61 +112,61 @@ export async function obtainAllPossibleRows(folderPath: string, ddbbConfig: Loca
113112

114113
export async function sourceDataviewPages(ddbbConfig: LocalSettings, folderPath: string, columns?: TableColumn[]): Promise<DataArray<Record<string, Literal>>> {
115114
let pagesResult: DataArray<Record<string, Literal>>;
116-
switch (ddbbConfig.source_data) {
117-
case SourceDataTypes.TAG:
118-
pagesResult = DataviewService.getDataviewAPI().pages(`${ddbbConfig.source_form_result.split(',').join(' OR ')}`);
119-
break;
120-
case SourceDataTypes.INCOMING_LINK:
121-
pagesResult = DataviewService.getDataviewAPI().pages(`[[${ddbbConfig.source_form_result}]]`);
122-
break;
123-
case SourceDataTypes.OUTGOING_LINK:
124-
pagesResult = DataviewService.getDataviewAPI().pages(`outgoing([[${ddbbConfig.source_form_result}]])`);
125-
break;
126-
case SourceDataTypes.QUERY:
127-
pagesResult = await obtainQueryResult(
128-
generateDataviewTableQuery(
129-
columns,
130-
ddbbConfig.source_form_result),
131-
folderPath
132-
);
133-
break;
134-
case SourceDataTypes.CURRENT_FOLDER_WITHOUT_SUBFOLDERS:
135-
if (!folderPath || folderPath === '/') {
136-
pagesResult = DataviewService.getDataviewAPI().pages()
137-
.where((p: NoteInfoPage) => !p.file.folder);
138-
} else {
139-
pagesResult = DataviewService.getDataviewAPI().pages(`"${folderPath}"`)
140-
.where((p: NoteInfoPage) => p.file.folder === folderPath);
141-
}
142-
break;
143-
default:
144-
pagesResult = DataviewService.getDataviewAPI().pages(`"${folderPath}"`);
145-
}
146-
return pagesResult;
147-
}
148-
149-
async function obtainQueryResult(query: string, folderPath: string): Promise<DataArray<Record<string, Literal>>> {
150115
try {
151-
const result = await DataviewService.getDataviewAPI().query(query);
152-
if (!result.successful || result.value.type !== 'table') {
153-
throw new Error(`Query ${query} failed`);
116+
switch (ddbbConfig.source_data) {
117+
case SourceDataTypes.TAG:
118+
pagesResult = DataviewService.getDataviewAPI().pages(`${ddbbConfig.source_form_result.split(',').join(' OR ')}`);
119+
break;
120+
case SourceDataTypes.INCOMING_LINK:
121+
pagesResult = DataviewService.getDataviewAPI().pages(`[[${ddbbConfig.source_form_result}]]`);
122+
break;
123+
case SourceDataTypes.OUTGOING_LINK:
124+
pagesResult = DataviewService.getDataviewAPI().pages(`outgoing([[${ddbbConfig.source_form_result}]])`);
125+
break;
126+
case SourceDataTypes.QUERY:
127+
pagesResult = await obtainQueryResult(
128+
generateDataviewTableQuery(
129+
columns,
130+
ddbbConfig.source_form_result),
131+
folderPath
132+
);
133+
break;
134+
case SourceDataTypes.CURRENT_FOLDER_WITHOUT_SUBFOLDERS:
135+
if (!folderPath || folderPath === '/') {
136+
pagesResult = DataviewService.getDataviewAPI().pages()
137+
.where((p: NoteInfoPage) => !p.file.folder);
138+
} else {
139+
pagesResult = DataviewService.getDataviewAPI().pages(`"${folderPath}"`)
140+
.where((p: NoteInfoPage) => p.file.folder === folderPath);
141+
}
142+
break;
143+
default:
144+
pagesResult = DataviewService.getDataviewAPI().pages(`"${folderPath}"`);
154145
}
155-
const arrayRecord: Record<string, Literal>[] = [];
156-
const headers = result.value.headers;
157-
result.value.values.forEach((row) => {
158-
const recordResult: Record<string, Literal> = {};
159-
headers.forEach((header, index) => {
160-
recordResult[header] = row[index];
161-
})
162-
arrayRecord.push(recordResult);
163-
});
164-
return DataviewService.getDataviewAPI().array(arrayRecord);
165146
} catch (error) {
166-
const msg = `Error obtaining query result: "${query}", current folder loaded instead`;
147+
const msg = `Error obtaining pages result. Current folder loaded instead`;
167148
LOGGER.error(msg, error);
168149
new Notice(msg, 10000);
169-
return DataviewService.getDataviewAPI().pages(`"${folderPath}"`);
150+
pagesResult = DataviewService.getDataviewAPI().pages(`"${folderPath}"`);
170151
}
152+
return pagesResult;
153+
}
154+
155+
async function obtainQueryResult(query: string, folderPath: string): Promise<DataArray<Record<string, Literal>>> {
156+
const result = await DataviewService.getDataviewAPI().query(query);
157+
if (!result.successful || result.value.type !== 'table') {
158+
throw new Error(`Query ${query} failed`);
159+
}
160+
const arrayRecord: Record<string, Literal>[] = [];
161+
const headers = result.value.headers;
162+
result.value.values.forEach((row) => {
163+
const recordResult: Record<string, Literal> = {};
164+
headers.forEach((header, index) => {
165+
recordResult[header] = row[index];
166+
})
167+
arrayRecord.push(recordResult);
168+
});
169+
return DataviewService.getDataviewAPI().array(arrayRecord);
171170
}
172171

173172
export function obtainCellFromFile(path: string, column: TableColumn): Literal {

src/main.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,7 @@ export default class DBFolderPlugin extends Plugin {
412412
await view.reloadDatabase();
413413
}
414414
}
415+
await sleep(2000);
415416
/**
416417
* Once the index is ready, we can start listening for metadata changes.
417418
*/

0 commit comments

Comments
 (0)