Skip to content

Commit 482796a

Browse files
committed
fixed some bugs with the new view fields
1 parent bc0bfdf commit 482796a

File tree

15 files changed

+57
-68
lines changed

15 files changed

+57
-68
lines changed

exampleVault/Advanced Examples/PF2e Encounter Calculator.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ playerCount: 6
33
playerLevel: 4
44
enemy:
55
- name: Somthing
6-
level: 4
7-
count: 1
6+
level: 2
7+
count: 2
88
variant: 0
99
- name: Some other thing
1010
level: 2

exampleVault/View Fields/View Field.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
number1: 12
33
number2: 200
44
unit: km
5-
distance: 12534
6-
computed: "**12534**"
5+
distance: 12
6+
computed: "**12**"
77
---
88

99
`INPUT[number:number1]`

src/metaBindTable/MetaBindTable.ts

Lines changed: 26 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import MetaBindTableComponent from './MetaBindTableComponent.svelte';
99
import { ViewFieldMDRC } from '../renderChildren/ViewFieldMDRC';
1010
import { Component } from 'obsidian';
1111
import { UnvalidatedViewFieldDeclaration, ViewFieldDeclaration } from '../parsers/viewFieldParser/ViewFieldDeclaration';
12+
import { MetadataSubscription } from '../metadata/MetadataFileCache';
1213

1314
export type MetaBindTableCell = InputFieldDeclaration | ViewFieldDeclaration;
1415

@@ -29,16 +30,18 @@ export class MetaBindTable extends AbstractMDRC {
2930
columns: MetaBindColumnDeclaration[];
3031
tableComponent: MetaBindTableComponent | undefined;
3132

32-
private metadataManagerReadSignalListener: Listener<T | undefined> | undefined;
33+
private metadataManagerOutputSignalListener: Listener<T | undefined> | undefined;
3334

3435
/**
3536
* Signal to write to the input field
3637
*/
37-
public writeSignal: Signal<T | undefined>;
38+
public inputSignal: Signal<T | undefined>;
3839
/**
3940
* Signal to read from the input field
4041
*/
41-
public readSignal: Signal<T | undefined>;
42+
public outputSignal: Signal<T | undefined>;
43+
44+
private metadataSubscription?: MetadataSubscription;
4245

4346
constructor(
4447
containerEl: HTMLElement,
@@ -55,30 +58,34 @@ export class MetaBindTable extends AbstractMDRC {
5558
this.tableHead = tableHead;
5659
this.columns = columns;
5760

58-
this.writeSignal = new Signal<T | undefined>(undefined);
59-
this.readSignal = new Signal<T | undefined>(undefined);
61+
this.inputSignal = new Signal<T | undefined>(undefined);
62+
this.outputSignal = new Signal<T | undefined>(undefined);
6063
}
6164

6265
registerSelfToMetadataManager(): undefined {
63-
this.metadataManagerReadSignalListener = this.readSignal.registerListener({ callback: this.updateMetadataManager.bind(this) });
66+
this.metadataManagerOutputSignalListener = this.outputSignal.registerListener({ callback: this.updateMetadataManager.bind(this) });
6467

65-
this.plugin.metadataManager.register(this.bindTarget.filePath ?? this.filePath, this.writeSignal, this.bindTarget.metadataPath, false, this.uuid);
68+
this.metadataSubscription = this.plugin.metadataManager.subscribe(
69+
this.uuid,
70+
this.inputSignal,
71+
this.plugin.api.bindTargetParser.toFullDeclaration(this.bindTarget, this.filePath)
72+
);
6673
}
6774

6875
unregisterSelfFromMetadataManager(): void {
69-
if (this.metadataManagerReadSignalListener) {
70-
this.readSignal.unregisterListener(this.metadataManagerReadSignalListener);
76+
if (this.metadataManagerOutputSignalListener) {
77+
this.outputSignal.unregisterListener(this.metadataManagerOutputSignalListener);
7178
}
7279

73-
this.plugin.metadataManager.unregister(this.bindTarget.filePath ?? this.filePath, this.uuid);
80+
this.metadataSubscription?.unsubscribe();
7481
}
7582

7683
updateMetadataManager(value: unknown): void {
77-
this.plugin.metadataManager.updatePropertyInCache(value, this.bindTarget.metadataPath, this.bindTarget.filePath ?? this.filePath, this.uuid);
84+
this.metadataSubscription?.update(value);
7885
}
7986

8087
getInitialValue(): T {
81-
return this.writeSignal.get() ?? [];
88+
return this.inputSignal.get() ?? [];
8289
}
8390

8491
updateDisplayValue(values: T | undefined): void {
@@ -90,6 +97,7 @@ export class MetaBindTable extends AbstractMDRC {
9097
const scope = new BindTargetScope({
9198
metadataPath: [...this.bindTarget.metadataPath, i.toString()],
9299
filePath: this.bindTarget.filePath,
100+
listenToChildren: false,
93101
boundToLocalScope: false,
94102
});
95103

@@ -132,16 +140,16 @@ export class MetaBindTable extends AbstractMDRC {
132140
}
133141

134142
removeColumn(index: number): void {
135-
const value = this.writeSignal.get() ?? [];
143+
const value = this.inputSignal.get() ?? [];
136144
value.splice(index, 1);
137-
this.readSignal.set(value);
145+
this.outputSignal.set(value);
138146
this.updateDisplayValue(value);
139147
}
140148

141149
addColumn(): void {
142-
const value = this.writeSignal.get() ?? [];
150+
const value = this.inputSignal.get() ?? [];
143151
value.push({});
144-
this.readSignal.set(value);
152+
this.outputSignal.set(value);
145153
this.updateDisplayValue(value);
146154
}
147155

@@ -156,13 +164,13 @@ export class MetaBindTable extends AbstractMDRC {
156164
},
157165
});
158166

159-
this.writeSignal.registerListener({
167+
this.inputSignal.registerListener({
160168
callback: values => {
161169
this.updateDisplayValue(values);
162170
},
163171
});
164172

165-
this.updateDisplayValue(this.writeSignal.get());
173+
this.updateDisplayValue(this.inputSignal.get());
166174
}
167175

168176
public onunload(): void {

src/metadata/MetadataManager.ts

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -355,21 +355,6 @@ export class MetadataManager {
355355
console.debug(`meta-bind | MetadataManager >> notifying input field ${listener.uuid} of updated metadata value`, value);
356356
listener.notify(value);
357357
}
358-
359-
// if (listener.bindTarget.listenToChildren) {
360-
// // TODO: this should update when there is any overlap in the beginning of the array
361-
// if (arrayStartsWith(metadataPath, listener.bindTarget.metadataPath)) {
362-
// const actualValue = traverseObjectByPath(listener.bindTarget.metadataPath, fileCache.metadata);
363-
// console.debug(`meta-bind | MetadataManager >> notifying input field ${listener.uuid} of updated metadata value`, actualValue);
364-
// listener.notify(actualValue);
365-
// }
366-
// } else {
367-
// if (arrayStartsWith(listener.bindTarget.metadataPath, metadataPath)) {
368-
// const actualValue = traverseObjectByPath(listener.bindTarget.metadataPath, fileCache.metadata);
369-
// console.debug(`meta-bind | MetadataManager >> notifying input field ${listener.uuid} of updated metadata value`, actualValue);
370-
// listener.notify(actualValue);
371-
// }
372-
// }
373358
} else {
374359
const v = traverseObjectByPath(listener.bindTarget.metadataPath, fileCache.metadata);
375360
console.debug(

src/parsers/BindTargetParser.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ export class BindTargetParser {
7070

7171
bindTargetDeclaration.metadataPath = unvalidatedBindTargetDeclaration.path.map(x => x.value);
7272
bindTargetDeclaration.boundToLocalScope = unvalidatedBindTargetDeclaration.boundToLocalScope;
73+
bindTargetDeclaration.listenToChildren = unvalidatedBindTargetDeclaration.listenToChildren;
7374

7475
return this.resolveScope(bindTargetDeclaration, scope);
7576
}

src/parsers/inputFieldParser/InputFieldDeclaration.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ export interface InputFieldDeclaration {
3939
export interface UnvalidatedBindTargetDeclaration {
4040
file?: ParsingResultNode;
4141
boundToLocalScope: boolean;
42+
listenToChildren: boolean;
4243
path: ParsingResultNode[];
4344
}
4445

src/parsers/nomParsers/BindTargetParsers.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,21 +16,23 @@ const firstMetadataPathPart: Parser<UnvalidatedBindTargetDeclaration> = P.or(
1616
return {
1717
file: undefined,
1818
boundToLocalScope: prefix === '^',
19+
listenToChildren: false,
1920
path: firstPart,
20-
};
21+
} satisfies UnvalidatedBindTargetDeclaration;
2122
},
22-
P.or(P.string('^'), P.string('?')).optional(),
23+
P.string('^').optional(),
2324
bracketMetadataPathPart.atLeast(1)
2425
),
2526
P.sequenceMap(
2627
(prefix, firstPart, bracketPath) => {
2728
return {
2829
file: undefined,
2930
boundToLocalScope: prefix === '^',
31+
listenToChildren: false,
3032
path: [firstPart, ...bracketPath],
31-
};
33+
} satisfies UnvalidatedBindTargetDeclaration;
3234
},
33-
P.or(P.string('^'), P.string('?')).optional(),
35+
P.string('^').skip(P.string('.')).optional(),
3436
metadataPathPartIdent,
3537
bracketMetadataPathPart.many()
3638
)

src/parsers/nomParsers/ViewFieldParsers.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,12 @@ export const VIEW_FIELD_FULL_DECLARATION: Parser<PartialUnvalidatedViewFieldDecl
5656

5757
const jsViewFieldBindTargetMapping: Parser<UnvalidatedJsViewFieldBindTargetMapping> = P.sequenceMap(
5858
(bindTarget, children, _1, name) => {
59+
if (children !== undefined) {
60+
bindTarget.listenToChildren = true;
61+
}
62+
5963
return {
6064
bindTarget: bindTarget,
61-
listenToChildren: children !== undefined,
6265
name: name
6366
} satisfies UnvalidatedJsViewFieldBindTargetMapping;
6467
},

src/parsers/viewFieldParser/ViewFieldDeclaration.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ export interface ViewFieldDeclaration {
4545

4646
export interface UnvalidatedJsViewFieldBindTargetMapping {
4747
bindTarget: UnvalidatedBindTargetDeclaration;
48-
listenToChildren: boolean;
4948
name: string;
5049
}
5150

src/publish/PublishViewFieldMDRC.ts

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,9 @@ export class PublishViewFieldMDRC extends MarkdownRenderChild {
5454
if (typeof entry !== 'string') {
5555
const variable: ViewFieldVariable = {
5656
bindTargetDeclaration: entry,
57-
writeSignal: new Signal<any>(undefined),
57+
inputSignal: new Signal<any>(undefined),
5858
uuid: self.crypto.randomUUID(),
59-
writeSignalListener: undefined,
6059
contextName: `MB_VAR_${varCounter}`,
61-
listenToChildren: false,
6260
};
6361

6462
this.variables.push(variable);
@@ -81,11 +79,11 @@ export class PublishViewFieldMDRC extends MarkdownRenderChild {
8179
buildContext(): Record<string, any> {
8280
const context: Record<string, any> = {};
8381
for (const variable of this.variables ?? []) {
84-
if (!variable.contextName || !variable.writeSignal) {
82+
if (!variable.contextName || !variable.inputSignal) {
8583
continue;
8684
}
8785

88-
context[variable.contextName] = variable.writeSignal.get() ?? '';
86+
context[variable.contextName] = variable.inputSignal.get() ?? '';
8987
}
9088

9189
return context;

0 commit comments

Comments
 (0)