diff --git a/lifetracker-vue/package-lock.json b/lifetracker-vue/package-lock.json
index f64fb54..73051a6 100644
--- a/lifetracker-vue/package-lock.json
+++ b/lifetracker-vue/package-lock.json
@@ -12,6 +12,7 @@
"appwrite": "^11.0.0",
"axios": "^1.4.0",
"handsontable": "^12.3.3",
+ "luxon": "^3.3.0",
"moment": "^2.29.4",
"node": "^20.0.0",
"pinia": "^2.0.35",
@@ -1295,6 +1296,14 @@
"node": ">=10"
}
},
+ "node_modules/luxon": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.3.0.tgz",
+ "integrity": "sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg==",
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/magic-string": {
"version": "0.25.9",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
@@ -3196,6 +3205,11 @@
"yallist": "^4.0.0"
}
},
+ "luxon": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.3.0.tgz",
+ "integrity": "sha512-An0UCfG/rSiqtAIiBPO0Y9/zAnHUZxAMiCpTd5h2smgsj7GGmcenvrvww2cqNA8/4A5ZrD1gJpHN2mIHZQF+Mg=="
+ },
"magic-string": {
"version": "0.25.9",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz",
diff --git a/lifetracker-vue/package.json b/lifetracker-vue/package.json
index 55389a2..ea14841 100644
--- a/lifetracker-vue/package.json
+++ b/lifetracker-vue/package.json
@@ -14,6 +14,7 @@
"appwrite": "^11.0.0",
"axios": "^1.4.0",
"handsontable": "^12.3.3",
+ "luxon": "^3.3.0",
"moment": "^2.29.4",
"node": "^20.0.0",
"pinia": "^2.0.35",
diff --git a/lifetracker-vue/src/assets/colors.css b/lifetracker-vue/src/assets/colors.css
index b056e68..4d53de5 100644
--- a/lifetracker-vue/src/assets/colors.css
+++ b/lifetracker-vue/src/assets/colors.css
@@ -21,6 +21,14 @@
filter: contrast(85%);
}
+.invert {
+ filter: invert();
+}
+
+.day-of-week{
+ text-transform: uppercase;
+}
+
.handsontable * {
border: 0px !important;
text-align: center !important;
diff --git a/lifetracker-vue/src/services/appwrite.js b/lifetracker-vue/src/services/appwrite.js
index 0cdd326..64d6af6 100644
--- a/lifetracker-vue/src/services/appwrite.js
+++ b/lifetracker-vue/src/services/appwrite.js
@@ -1,4 +1,5 @@
import { Client, Databases, Account, Query } from "appwrite";
+import { DateTime } from "luxon";
class AppwriteService {
databaseId = 'lifetracker-db';
@@ -40,12 +41,25 @@ class AppwriteService {
return await this.getUser();
}
- getEntries = async () => {
+ getEntries = async (date=null, numEntries=25) => {
+ if(date == null){date = DateTime.now()}
+
+ date = DateTime.fromISO(date);
+
+ var firstEntry = (await this.database.listDocuments(
+ this.databaseId, this.collectionId,
+ [Query.orderAsc("date"),Query.limit(1)])
+ ).documents[0];
+ var referenceDate = DateTime.fromISO(firstEntry.date).toUTC();
+
+ var offset = Math.floor(date.diff(referenceDate).as("days")) - 1;
+
return (await this.database.listDocuments(
this.databaseId, this.collectionId,
[
Query.orderAsc("date"),
- //Query.limit(365)
+ Query.offset(offset),
+ Query.limit(numEntries)
]
)
).documents;
diff --git a/lifetracker-vue/src/views/TableView.vue b/lifetracker-vue/src/views/TableView.vue
index 49cdb9d..6006e9d 100644
--- a/lifetracker-vue/src/views/TableView.vue
+++ b/lifetracker-vue/src/views/TableView.vue
@@ -2,11 +2,11 @@
import { useDatabaseStore } from "@/stores/database"
import Api from "@/services/Api"
import appwrite from '@/services/appwrite';
-import moment from 'moment';
+import { DateTime } from "luxon";
-