11import { InputType , MarkdownBreakerRules } from "helpers/Constants" ;
2- import { Literal , WrappedLiteral } from "obsidian-dataview/lib/data-model/value" ;
2+ import { DataObject , Literal , WrappedLiteral } from "obsidian-dataview/lib/data-model/value" ;
33import { DateTime } from "luxon" ;
44import { LOGGER } from "services/Logger" ;
55import { DataviewService } from "services/DataviewService" ;
@@ -27,9 +27,6 @@ class Parse {
2727 . type } to ${ dataTypeDst } `) ;
2828 // Check empty or undefined literals
2929 switch ( dataTypeDst ) {
30- case InputType . TEXT :
31- parsedLiteral = this . parseToString ( wrapped ) ;
32- break ;
3330 case InputType . MARKDOWN :
3431 parsedLiteral = this . parseToMarkdown ( wrapped , localSettings , isInline ) ;
3532 break ;
@@ -56,7 +53,7 @@ class Parse {
5653 // Do nothing
5754 break ;
5855 default :
59- parsedLiteral = parsedLiteral = this . parseToString ( wrapped ) ;
56+ parsedLiteral = this . parseToText ( wrapped , localSettings ) ;
6057
6158 }
6259 LOGGER . debug ( `<=parseLiteral` ) ;
@@ -96,13 +93,18 @@ class Parse {
9693 }
9794 }
9895
99- private parseToString ( wrapped : WrappedLiteral ) : string {
100- if ( DateTime . isDateTime ( wrapped . value ) ) {
101- LOGGER . debug ( "adapting DateTime to string..." ) ;
102- // Values of dataview parse to md friendly strings
103- return wrapped . value . toFormat ( "yyyy-MM-dd" ) ;
104- } else {
105- return DataviewService . getDataviewAPI ( ) . value . toString ( wrapped . value ) ;
96+ private parseToText ( wrapped : WrappedLiteral , localSettings : LocalSettings ) : string | DataObject {
97+ switch ( wrapped . type ) {
98+ case 'object' :
99+ if ( DateTime . isDateTime ( wrapped . value ) ) {
100+ return wrapped . value . toFormat ( localSettings . datetime_format ) ;
101+ } else {
102+ // nested metadata exposed as DataObject
103+ return wrapped . value ;
104+ }
105+ // Else go to default
106+ default :
107+ return DataviewService . getDataviewAPI ( ) . value . toString ( wrapped . value ) ;
106108 }
107109 }
108110
@@ -129,9 +131,9 @@ class Parse {
129131 switch ( wrapped . type ) {
130132 case 'boolean' :
131133 case 'number' :
132- // Do nothing
133134 auxMarkdown = wrapped . value . toString ( ) ;
134135 break ;
136+
135137 case 'array' :
136138 auxMarkdown = wrapped . value
137139 . map ( v => this . parseToMarkdown ( DataviewService . getDataviewAPI ( ) . value . wrapValue ( v ) , localSettings , isInline ) )
@@ -145,7 +147,6 @@ class Parse {
145147 } else {
146148 // Parse datetime
147149 auxMarkdown = wrapped . value . toFormat ( localSettings . datetime_format ) ;
148- auxMarkdown = this . handleMarkdownBreaker ( auxMarkdown , localSettings , isInline ) ;
149150 }
150151 break ;
151152 case 'object' :
@@ -154,11 +155,10 @@ class Parse {
154155 }
155156 // Else go to default
156157 default :
157- auxMarkdown = this . parseToString ( wrapped ) as string ;
158- // Check possible markdown breakers
159- auxMarkdown = this . handleMarkdownBreaker ( auxMarkdown , localSettings , isInline ) ;
158+ auxMarkdown = DataviewService . getDataviewAPI ( ) . value . toString ( wrapped . value ) ;
160159 }
161- return auxMarkdown ;
160+ // Check possible markdown breakers
161+ return this . handleYamlBreaker ( auxMarkdown , localSettings , isInline ) ; ;
162162 }
163163
164164 private parseToOptionsArray ( wrapped : WrappedLiteral ) : Literal {
@@ -168,7 +168,7 @@ class Parse {
168168 return wrapped . value ;
169169 }
170170
171- private handleMarkdownBreaker ( value : string , localSettings : LocalSettings , isInline ?: boolean ) : string {
171+ private handleYamlBreaker ( value : string , localSettings : LocalSettings , isInline ?: boolean ) : string {
172172 // Do nothing if is inline
173173 if ( isInline ) {
174174 return value ;
@@ -191,6 +191,7 @@ class Parse {
191191
192192 return value ;
193193 }
194+
194195 /**
195196 * Singleton instance
196197 * @returns {VaultManager }
0 commit comments