From 5cf17596533e2db449a1c1e29df1d9bf79badff7 Mon Sep 17 00:00:00 2001 From: Jose Olarte III Date: Tue, 29 Jul 2025 19:34:40 +0800 Subject: [PATCH 01/11] Fix: switch to CSS-based text-truncate - Eliminate dependence on arbitrary maxlength for truncation - Ensure truncation is purely visual, and does not touch content --- src/App.vue | 37 +++++++++++++++---------------------- 1 file changed, 15 insertions(+), 22 deletions(-) diff --git a/src/App.vue b/src/App.vue index 76acc710..0b190521 100644 --- a/src/App.vue +++ b/src/App.vue @@ -27,9 +27,9 @@ v-if="notification.type === 'toast'" class="w-full max-w-sm mx-auto mb-3 overflow-hidden bg-slate-900/90 text-white rounded-lg shadow-md" > -
- {{ notification.title }} -

{{ notification.text }}

+
+

{{ notification.title }}

+

{{ notification.text }}

@@ -46,9 +46,9 @@ > -
- {{ notification.title }} -

{{ truncateLongWords(notification.text) }}

+
+

{{ notification.title }}

+

{{ notification.text }}

-
- {{ notification.title }} -

{{ truncateLongWords(notification.text) }}

+
+

{{ notification.title }}

+

{{ notification.text }}

-
- {{ notification.title }} -

{{ truncateLongWords(notification.text) }}

+
+

{{ notification.title }}

+

{{ notification.text }}

-
- {{ notification.title }} -

{{ truncateLongWords(notification.text) }}

+
+

{{ notification.title }}

+

{{ notification.text }}

+ +
+ +

Notiwind Alerts

@@ -99,7 +109,7 @@
Register Passkey -
@@ -235,6 +245,7 @@ import { registerAndSavePasskey, SHARED_PHOTO_BASE64_KEY, } from "../libs/util"; +import { testBecomeUser0, testServerRegisterUser } from "@/test"; import { logger } from "../utils/logger"; import { Account } from "../db/tables/accounts"; import { PlatformServiceMixin } from "@/utils/PlatformServiceMixin"; @@ -300,6 +311,7 @@ export default class Help extends Vue { // for passkeys credIdHex?: string; activeDid?: string; + apiServer?: string; jwt?: string; peerSetup?: PeerSetup; userName?: string; @@ -521,17 +533,6 @@ export default class Help extends Vue { ]; } - /** - * Method to trigger notification test - * Centralizes notification testing logic - */ - triggerTestNotification(config: { - notification: NotificationIface; - timeout?: number; - }) { - this.$notify(config.notification, config.timeout); - } - /** * Component initialization * @@ -541,6 +542,7 @@ export default class Help extends Vue { async mounted() { const settings = await this.$accountSettings(); this.activeDid = settings.activeDid || ""; + this.apiServer = settings.apiServer || ""; this.userName = settings.firstName; const account = await retrieveAccountMetadata(this.activeDid); @@ -553,6 +555,43 @@ export default class Help extends Vue { } } + /** + * Checks if running on production server + * + * @returns True if not on production server (enables test utilities) + */ + public isNotProdServer() { + return this.apiServer !== AppString.PROD_ENDORSER_API_SERVER; + } + + async registerMe() { + const response = await testServerRegisterUser(); + if (response.status === 201) { + alert("Registration successful."); + this.$router.push({ name: "home" }); // because this page checks for registered status and sets things if it detects a change + } else { + logger.error("Registration failure response:", response); + alert("Registration failed: " + (response.data.error || response.data)); + } + } + + async becomeUser0() { + await testBecomeUser0(); + alert("You are now User 0."); + this.$router.push({ name: "home" }); // because this page checks for registered status and sets things if it detects a change + } + + /** + * Method to trigger notification test + * Centralizes notification testing logic + */ + triggerTestNotification(config: { + notification: NotificationIface; + timeout?: number; + }) { + this.$notify(config.notification, config.timeout); + } + /** * Handles file upload for image sharing tests * @@ -609,7 +648,7 @@ export default class Help extends Vue { * Includes validation and user confirmation workflow * Uses notification helpers for consistent messaging */ - public async register() { + public async registerPasskey() { const DEFAULT_USERNAME = AppString.APP_NAME + " Tester"; if (!this.userName) { const modalConfig = createPasskeyNameModal( From 81096a8bee0a2be936e8e90fae5e30efb401b73f Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Wed, 13 Aug 2025 18:59:00 -0600 Subject: [PATCH 10/11] doc: Add instructions to become test user, and other README refactors. --- README.md | 36 +++++------------------------------- 1 file changed, 5 insertions(+), 31 deletions(-) diff --git a/README.md b/README.md index 6d987467..59290d4d 100644 --- a/README.md +++ b/README.md @@ -3,36 +3,9 @@ [Time Safari](https://timesafari.org/) allows people to ease into collaboration: start with expressions of gratitude and expand to crowd-fund with time & money, then record and see the impact of contributions. -## Database Migration Status - -**Current Status**: The application is undergoing a migration from Dexie (IndexedDB) to SQLite using absurd-sql. This migration is in **Phase 2** with a well-defined migration fence in place. - -### Migration Progress -- ✅ **SQLite Database Service**: Fully implemented with absurd-sql -- ✅ **Platform Service Layer**: Unified database interface across platforms -- ✅ **Settings Migration**: Core user settings transferred -- ✅ **Account Migration**: Identity and key management -- 🔄 **Contact Migration**: User contact data (via import interface) -- 📋 **Code Cleanup**: Remove unused Dexie imports - -### Migration Fence -The migration is controlled by a **migration fence** that separates legacy Dexie code from the new SQLite implementation. See [Migration Fence Definition](doc/migration-fence-definition.md) for complete details. - -**Key Points**: -- Legacy Dexie database is disabled by default -- All database operations go through `PlatformServiceMixin` -- Migration tools provide controlled access to both databases -- Clear separation between legacy and new code - -### Migration Documentation -- [Migration Guide](doc/migration-to-wa-sqlite.md) - Complete migration process -- [Migration Fence Definition](doc/migration-fence-definition.md) - Fence boundaries and rules -- [Database Migration Guide](doc/database-migration-guide.md) - User-facing migration tools - ## Roadmap -See [project.task.yaml](project.task.yaml) for current priorities. -(Numbers at the beginning of lines are estimated hours. See [taskyaml.org](https://taskyaml.org/) for details.) +See [ClickUp](https://sharing.clickup.com/9014278710/l/h/8cmnyhp-174/10573fec74e2ba0) for current priorities. ## Setup & Building @@ -42,14 +15,16 @@ Quick start: ```bash npm install -npm run dev +npm run build:web:serve -- --test ``` +To be able to make submissions: go to "profile" (bottom left), go to the bottom and expand "Show Advanced Settings", go to the bottom and to the "Test Page", and finally "Become User 0" to see all the functionality. + See [BUILDING.md](BUILDING.md) for comprehensive build instructions for all platforms (Web, Electron, iOS, Android, Docker). ## Development Database Clearing -TimeSafari provides a simple script-based approach to clear the database for development purposes. +TimeSafari provides a simple script-based approach to clear the local database (not the claim server) for development purposes. ### Quick Usage ```bash @@ -126,7 +101,6 @@ const apiUrl = `${APP_SERVER}/api/claim/123`; ### Documentation -- [Domain Configuration System](docs/domain-configuration.md) - Complete guide - [Constants and Configuration](src/constants/app.ts) - Core constants ## Tests From 79593f12b4be598e4bce60ad75c630cddebfe875 Mon Sep 17 00:00:00 2001 From: Matthew Raymer Date: Thu, 14 Aug 2025 11:05:34 +0000 Subject: [PATCH 11/11] fix(types): resolve notification system type safety issues - Replace $notify any types with proper NotifyFunction interface - Import NotifyFunction type from utils/notify - Eliminate 5 TypeScript any type warnings - Improve type safety for notification system across components Reduces lint warnings from 25 to 20 by addressing high-impact, low-effort notification type issues. Maintains full functionality while improving code quality and IntelliSense support. --- src/App.vue | 56 +++++++++++++++++++------- src/components/ActivityListItem.vue | 4 +- src/components/GiftedDialog.vue | 4 +- src/components/ImageMethodDialog.vue | 4 +- src/test/index.ts | 12 ++++-- src/views/ContactQRScanFullView.vue | 4 +- src/views/ImportDerivedAccountView.vue | 4 +- 7 files changed, 61 insertions(+), 27 deletions(-) diff --git a/src/App.vue b/src/App.vue index 0b190521..8bd39b52 100644 --- a/src/App.vue +++ b/src/App.vue @@ -28,8 +28,12 @@ class="w-full max-w-sm mx-auto mb-3 overflow-hidden bg-slate-900/90 text-white rounded-lg shadow-md" >
-

{{ notification.title }}

-

{{ notification.text }}

+

+ {{ notification.title }} +

+

+ {{ notification.text }} +

@@ -46,9 +50,15 @@ >
-
-

{{ notification.title }}

-

{{ notification.text }}

+
+

+ {{ notification.title }} +

+

+ {{ notification.text }} +

-
-

{{ notification.title }}

-

{{ notification.text }}

+
+

+ {{ notification.title }} +

+

+ {{ notification.text }} +

-
-

{{ notification.title }}

-

{{ notification.text }}

+
+

+ {{ notification.title }} +

+

+ {{ notification.text }} +

-
-

{{ notification.title }}

-

{{ notification.text }}

+
+

+ {{ notification.title }} +

+

+ {{ notification.text }} +