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

Commit 8175b96

Browse files
committed
used of wrappedLiteral
1 parent 22f3995 commit 8175b96

File tree

3 files changed

+33
-15
lines changed

3 files changed

+33
-15
lines changed

src/components/Cell.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export default function DefaultCell(cellProperties: Cell) {
4545
}
4646
}, []);
4747

48-
useLayoutEffect(() => {
48+
useEffect(() => {
4949
if (!dirtyCell && containerCellRef.current) {
5050
//TODO - this is a hack. find why is layout effect called twice
5151
containerCellRef.current.innerHTML = "";
@@ -109,6 +109,7 @@ export default function DefaultCell(cellProperties: Cell) {
109109
setContextValue((old) => ({ value: old.value, update: true }))
110110
}
111111
className={"data-input"}
112+
//innerRef={containerCellRef}
112113
/>
113114
);
114115
/** Number option */

src/components/portals/CalendarPortal.tsx

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import { usePopper } from "react-popper";
99
import { Cell } from "react-table";
1010
import NoteInfo from "services/NoteInfo";
1111
import { DataviewService } from "services/DataviewService";
12+
import { Literal } from "obsidian-dataview/lib/data-model/value";
1213

1314
type CalendarProps = {
1415
intialState: TableDataType;
@@ -42,6 +43,7 @@ const CalendarPortal = (calendarProps: CalendarProps) => {
4243
row: cellProperties.row,
4344
columnId: (cellProperties.column as any).id,
4445
});
46+
4547
setCalendarState(date);
4648
setShowCalendar(false);
4749
setContextValue({
@@ -50,6 +52,12 @@ const CalendarPortal = (calendarProps: CalendarProps) => {
5052
});
5153
}
5254

55+
if (contextValue.value instanceof DateTime) {
56+
console.log("calendar datatime value");
57+
} else {
58+
console.log("calendar differ value");
59+
}
60+
5361
function handlerOnClick(e: any) {
5462
if (!column.isMetadata) {
5563
const portalActive = document.getElementById("unique-calendar-portal");
@@ -101,7 +109,10 @@ const CalendarPortal = (calendarProps: CalendarProps) => {
101109
onClick={handlerOnClick}
102110
>
103111
<span>
104-
{DataviewService.parseLiteral(contextValue.value, DataTypes.TEXT)}
112+
{DataviewService.parseLiteral(
113+
contextValue.value as Literal,
114+
DataTypes.TEXT
115+
)}
105116
</span>
106117
</div>
107118
{showCalendar &&

src/services/DataviewService.ts

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@ import { FilterCondition } from "cdm/DatabaseModel";
22
import { DataTypes, getOperatorFilterValue, OperatorFilter } from "helpers/Constants";
33
import { Notice } from "obsidian";
44
import { getAPI, isPluginEnabled } from "obsidian-dataview";
5-
import { Literal } from "obsidian-dataview/lib/data-model/value";
5+
import { Literal, WrappedLiteral } from "obsidian-dataview/lib/data-model/value";
66
import { DvAPIInterface } from "obsidian-dataview/lib/typings/api";
77
import { DateTime } from "luxon";
8-
import NoteInfo from "services/NoteInfo";
98
class DataviewProxy {
109

1110
private static instance: DataviewProxy;
@@ -61,25 +60,24 @@ class DataviewProxy {
6160
}
6261
}
6362

64-
parseLiteral(literal: Literal | NoteInfo, dataTypeDst: string): Literal | NoteInfo {
65-
if (literal === null || literal === undefined) return "";
66-
let parsedLiteral: Literal | NoteInfo = literal;
63+
parseLiteral(literal: Literal, dataTypeDst: string): Literal {
64+
let parsedLiteral: Literal = literal;
65+
const wrapped = this.getDataviewAPI().value.wrapValue(literal)
6766
// Check empty or undefined literals
6867
switch (dataTypeDst) {
6968
case DataTypes.CALENDAR:
70-
switch (typeof literal) {
71-
case "string":
72-
parsedLiteral = DateTime.fromISO(literal);
73-
break;
74-
}
69+
parsedLiteral = this.parseToCalendar(wrapped);
7570
break;
7671
case DataTypes.NUMBER:
77-
parsedLiteral = isNaN(literal as any) ? ""
78-
: Number.parseInt(literal as string);
72+
parsedLiteral = wrapped.type === 'number' ? literal : Number(literal);
7973
break;
8074
default:
8175
// Values of dataview parse to md friendly strings
82-
parsedLiteral = this.getDataviewAPI().value.toString(literal);
76+
if (DateTime.isDateTime(wrapped.value)) {
77+
parsedLiteral = wrapped.value.toFormat("yyyy-MM-dd");
78+
} else {
79+
parsedLiteral = this.getDataviewAPI().value.toString(literal);
80+
}
8381
}
8482
return parsedLiteral;
8583
}
@@ -94,6 +92,14 @@ class DataviewProxy {
9492
}
9593
return this.instance;
9694
}
95+
96+
private parseToCalendar(literal: WrappedLiteral): Literal {
97+
if (literal.type === 'string') {
98+
return DateTime.fromISO(literal.value);
99+
} else {
100+
return literal.value;
101+
}
102+
}
97103
}
98104

99105
export const DataviewService = DataviewProxy.getInstance();

0 commit comments

Comments
 (0)