Skip to content

Commit 06c8c33

Browse files
committed
fix some view field bugs
1 parent 6b28c62 commit 06c8c33

File tree

8 files changed

+35
-34
lines changed

8 files changed

+35
-34
lines changed

exampleVault/Examples.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ inlineSelect: 1
1313
nested:
1414
object: test
1515
number1: 2
16-
number2: 18
16+
number2: 10
1717
time:
1818
---
1919

exampleVault/View Fields/View Field.md

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,8 @@ object:
1212
key: value
1313
file: Example Note with Embeds
1414
image: Other/Images/subfolder/img_frozen_branch.jpg
15-
someInputValue: 1
16-
someComputedValue:
17-
value: 2
18-
error: false
15+
someInputValue: 2
16+
someComputedValue: 4
1917
images:
2018
- Other/Images/img_flower.webp
2119
- Other/Images/img_butterfly.webp

packages/core/src/fields/viewFields/AbstractViewField.ts

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,11 @@ import type { ViewFieldVariable } from 'packages/core/src/fields/viewFields/View
44
import type { IPlugin } from 'packages/core/src/IPlugin';
55
import type { DerivedMetadataSubscription } from 'packages/core/src/metadata/DerivedMetadataSubscription';
66
import { Mountable } from 'packages/core/src/utils/Mountable';
7-
import { Signal } from 'packages/core/src/utils/Signal';
87
import { DomHelpers } from 'packages/core/src/utils/Utils';
98

109
export abstract class AbstractViewField<T> extends Mountable {
1110
readonly plugin: IPlugin;
1211
readonly mountable: ViewFieldMountable;
13-
readonly metadataSignal: Signal<T | undefined>;
1412

1513
private metadataSubscription?: DerivedMetadataSubscription;
1614

@@ -24,7 +22,6 @@ export abstract class AbstractViewField<T> extends Mountable {
2422

2523
this.mountable = mountable;
2624
this.plugin = mountable.plugin;
27-
this.metadataSignal = new Signal<T | undefined>(undefined);
2825

2926
this.variables = [];
3027

@@ -47,15 +44,12 @@ export abstract class AbstractViewField<T> extends Mountable {
4744
}
4845

4946
await this.onInitialRender(targetEl);
50-
51-
await this.rerender(targetEl, undefined);
5247
}
5348

5449
protected abstract onInitialRender(container: HTMLElement): void | Promise<void>;
5550

5651
private async rerender(targetEl: HTMLElement, value: T | undefined): Promise<void> {
5752
if (!this.hidden) {
58-
DomHelpers.empty(targetEl);
5953
await this.onRerender(targetEl, value);
6054
}
6155
}
@@ -65,7 +59,7 @@ export abstract class AbstractViewField<T> extends Mountable {
6559
protected onMount(targetEl: HTMLElement): void {
6660
this.buildVariables();
6761

68-
this.metadataSignal.registerListener({ callback: value => void this.rerender(targetEl, value) });
62+
void this.initialRender(targetEl);
6963

7064
this.metadataSubscription = this.mountable.plugin.metadataManager.subscribeDerived(
7165
this.mountable.getUuid(),
@@ -79,12 +73,9 @@ export abstract class AbstractViewField<T> extends Mountable {
7973
},
8074
() => this.mountable.unmount(),
8175
);
82-
83-
void this.initialRender(targetEl);
8476
}
8577

8678
protected onUnmount(): void {
87-
this.metadataSignal.unregisterAllListeners();
8879
this.metadataSubscription?.unsubscribe();
8980
}
9081
}

packages/core/src/fields/viewFields/fields/ImageVF.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,16 @@ export class ImageVF extends AbstractViewField<MarkdownLink | MarkdownLink[] | u
5757
const linkContent = this.linkVariable!.metadataSignal.get();
5858

5959
if (typeof linkContent === 'string') {
60-
return [MDLinkParser.parseLink(linkContent)];
60+
const link = MDLinkParser.interpretAsLink(linkContent);
61+
if (link === undefined) {
62+
return undefined;
63+
}
64+
return [link];
6165
} else if (Array.isArray(linkContent)) {
62-
return linkContent.filter(x => typeof x === 'string').map(x => MDLinkParser.parseLink(x));
66+
return linkContent
67+
.filter(x => typeof x === 'string')
68+
.map(x => MDLinkParser.interpretAsLink(x))
69+
.filter(x => x !== undefined);
6370
} else {
6471
return undefined;
6572
}

packages/core/src/fields/viewFields/fields/LinkVF.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -122,13 +122,20 @@ export class LinkVF extends AbstractViewField<MarkdownLink | MarkdownLink[] | un
122122
const alias = this.getAlias();
123123

124124
if (typeof linkContent === 'string') {
125-
const link = MDLinkParser.parseLink(linkContent);
125+
const link = MDLinkParser.interpretAsLink(linkContent);
126+
if (link === undefined) {
127+
return undefined;
128+
}
129+
126130
if (alias) {
127131
link.alias = alias;
128132
}
129133
return [link];
130134
} else if (Array.isArray(linkContent)) {
131-
return linkContent.filter(x => typeof x === 'string').map(x => MDLinkParser.parseLink(x));
135+
return linkContent
136+
.filter(x => typeof x === 'string')
137+
.map(x => MDLinkParser.interpretAsLink(x))
138+
.filter(x => x !== undefined);
132139
} else {
133140
return undefined;
134141
}

packages/core/src/fields/viewFields/fields/MathVF.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,10 +79,9 @@ export class MathVF extends AbstractViewField<MathVFResult> {
7979

8080
const context = this.buildMathJSContext();
8181
try {
82-
const value: unknown = this.expression.evaluate(context);
83-
const parsedValue = typeof value === 'string' ? parseLiteral(value) : value;
82+
const value: string = `${this.expression.evaluate(context)}`;
8483
return {
85-
value: parsedValue,
84+
value: parseLiteral(value),
8685
error: false,
8786
};
8887
} catch (e) {

packages/core/src/parsers/MarkdownLinkParser.ts

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -111,37 +111,32 @@ export class MDLinkParser {
111111
}
112112
}
113113

114-
static toLinkString(str: string, alias?: string): string {
114+
static interpretAsLink(str: string): MarkdownLink | undefined {
115115
// case 1: it's a valid link
116116
const linkParseTry = P_MDLink.thenEof().tryParse(str);
117117
if (linkParseTry.success) {
118-
if (alias) {
119-
linkParseTry.value.alias = alias;
120-
}
121-
122-
return linkParseTry.value.toString();
118+
return linkParseTry.value;
123119
}
124120

125121
// case 2: it's a valid inner link part, so something that is a valid link without the [[]] around it
126122
const linkParseTry2 = P_MDLinkInner.thenEof().tryParse(str);
127123
if (linkParseTry2.success) {
128-
const link = new MarkdownLink(
124+
return new MarkdownLink(
129125
false,
130126
linkParseTry2.value[0],
131127
linkParseTry2.value[1],
132-
alias ?? linkParseTry2.value[2],
133-
false,
128+
linkParseTry2.value[2],
129+
true,
134130
);
135-
return link.toString();
136131
}
137132

138133
// case 3: it's a url
139134
if (isUrl(str)) {
140135
const url = new URL(str);
141-
return `[${alias ?? url.hostname}](${str})`;
136+
return MarkdownLink.fromUrl(url);
142137
}
143138

144139
// case 4: it's a valid link
145-
return '';
140+
return undefined;
146141
}
147142
}

packages/core/src/utils/components/ImageGrid.svelte

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,16 @@
1111
} = $props();
1212
1313
export function updateImages(newImages: { link: string; internal: boolean }[]) {
14+
console.warn('updating images');
15+
1416
images = newImages;
1517
}
1618
</script>
1719

1820
<div class="mb-image-card-grid">
1921
{#each images as image}
2022
<ImageCard plugin={plugin} image={image.link} internal={image.internal}></ImageCard>
23+
{:else}
24+
<span>No images</span>
2125
{/each}
2226
</div>

0 commit comments

Comments
 (0)