From 287a440b3e327395c9188ed9a1f50bf9e8172175 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Thu, 6 Feb 2025 19:35:33 -0700 Subject: [PATCH 01/23] show a better message when admission to an onboarding meeting succeeds but registration fails --- src/components/MembersList.vue | 57 ++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 26 deletions(-) diff --git a/src/components/MembersList.vue b/src/components/MembersList.vue index 32850aa4..1e30590b 100644 --- a/src/components/MembersList.vue +++ b/src/components/MembersList.vue @@ -392,39 +392,44 @@ export default class MembersList extends Vue { did: member.did, name: member.name, } - const result = await register( - this.activeDid, - this.apiServer, - this.axios, - contactOldOrNew, - ); - if (result.success) { - member.member.registered = true; - if (oldContact) { - await db.contacts.update(member.did, { registered: true }); - oldContact.registered = true; - } - this.$notify( - { - group: "alert", - type: "success", - title: "Registered", - text: "Besides being admitted, they were also registered.", - }, - 3000, + try { + const result = await register( + this.activeDid, + this.apiServer, + this.axios, + contactOldOrNew, ); - } else { - const additionalInfo = result.error || ""; + if (result.success) { + member.member.registered = true; + if (oldContact) { + await db.contacts.update(member.did, { registered: true }); + oldContact.registered = true; + } + this.$notify( + { + group: "alert", + type: "success", + title: "Registered", + text: "Besides being admitted, they were also registered.", + }, + 3000, + ); + } else { + throw result; + } + // eslint-disable-next-line @typescript-eslint/no-explicit-any + } catch (error: any) { + // registration failure is likely explained by a message from the server + const additionalInfo = serverMessageForUser(error) || error?.error || ""; this.$notify( { group: "alert", - type: "danger", + type: "warning", title: "Registration failed", - text: - "They were admitted, but registration failed. You can try again, or register from your contacts screen. " + + text: "They were admitted to the meeting. However, registration failed. You can register them from the contacts screen. " + additionalInfo, }, - 10000, + 12000, ); } } From b8ca2a03fea75f609826e97fcd78e9be6d36daa4 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Thu, 6 Feb 2025 19:58:09 -0700 Subject: [PATCH 02/23] add 'isRegistered' flag to encrypted contents in an onboarding meeting --- src/components/MembersList.vue | 113 ++++++++++++++------------ src/views/OnboardMeetingListView.vue | 3 + src/views/OnboardMeetingSetupView.vue | 4 + 3 files changed, 68 insertions(+), 52 deletions(-) diff --git a/src/components/MembersList.vue b/src/components/MembersList.vue index 1e30590b..b7673add 100644 --- a/src/components/MembersList.vue +++ b/src/components/MembersList.vue @@ -171,13 +171,13 @@ interface Member { admitted: boolean; content: string; memberId: number; - registered: boolean; } interface DecryptedMember { member: Member; name: string; did: string; + isRegistered: boolean; } @Component @@ -258,6 +258,7 @@ export default class MembersList extends Vue { member: member, name: content.name, did: content.did, + isRegistered: !!content.isRegistered, }); if (isFirstEntry && content.did === this.activeDid) { this.isOrganizer = true; @@ -293,7 +294,7 @@ export default class MembersList extends Vue { group: "alert", type: "info", title: "Admission info", - text: "This is to register people and admit them to the meeting. A '+' symbol means they are not yet admitted and you can register and admit them. A '-' means you can remove them, but they will stay registered.", + text: "This is to register people in Time Safari and to admit them to the meeting. A '+' symbol means they are not yet admitted and you can register and admit them. A '-' means you can remove them, but they will stay registered.", }, 10000, ); @@ -331,67 +332,73 @@ export default class MembersList extends Vue { return this.contacts.find((contact) => contact.did === did); } - checkWhetherContactBeforeAdmitting(member: DecryptedMember) { - const contact = this.getContactFor(member.did); - if (!member.member.admitted && !contact) { + checkWhetherContactBeforeAdmitting(decrMember: DecryptedMember) { + const contact = this.getContactFor(decrMember.did); + if (!decrMember.member.admitted && !contact) { // If not a contact, show confirmation dialog - this.$notify({ - group: "modal", - type: "confirm", - title: "Add as Contact First?", - text: "This person is not in your contacts. Would you like to add them as a contact first?", - yesText: "Add as Contact", - noText: "Skip Adding Contact", - onYes: async () => { - await this.addAsContact(member); - // After adding as contact, proceed with admission - await this.toggleAdmission(member); - }, - onNo: async () => { - // If they choose not to add as contact, show second confirmation - this.$notify({ - group: "modal", - type: "confirm", - title: "Continue Without Adding?", - text: "Are you sure you want to proceed with admission even though they are not a contact?", - yesText: "Continue", - onYes: async () => { - await this.toggleAdmission(member); - }, - onCancel: async () => { - // Do nothing, effectively canceling the operation - }, + this.$notify( + { + group: "modal", + type: "confirm", + title: "Add as Contact First?", + text: "This person is not in your contacts. Would you like to add them as a contact first?", + yesText: "Add as Contact", + noText: "Skip Adding Contact", + onYes: async () => { + await this.addAsContact(decrMember); + // After adding as contact, proceed with admission + await this.toggleAdmission(decrMember); }, - -1, - ); - }, - }, - -1, - ); + onNo: async () => { + // If they choose not to add as contact, show second confirmation + this.$notify( + { + group: "modal", + type: "confirm", + title: "Continue Without Adding?", + text: "Are you sure you want to proceed with admission even though they are not a contact?", + yesText: "Continue", + onYes: async () => { + await this.toggleAdmission(decrMember); + }, + onCancel: async () => { + // Do nothing, effectively canceling the operation + }, + }, + -1, + ); + }, + }, + -1, + ); } else { // If already a contact, proceed directly with admission - this.toggleAdmission(member); + this.toggleAdmission(decrMember); } } - async toggleAdmission(member: DecryptedMember) { + async toggleAdmission(decrMember: DecryptedMember) { try { const headers = await getHeaders(this.activeDid); await this.axios.put( - `${this.apiServer}/api/partner/groupOnboardMember/${member.member.memberId}`, - { admitted: !member.member.admitted }, + `${this.apiServer}/api/partner/groupOnboardMember/${decrMember.member.memberId}`, + { admitted: !decrMember.member.admitted }, { headers }, ); // Update local state - member.member.admitted = !member.member.admitted; + decrMember.member.admitted = !decrMember.member.admitted; - const oldContact = this.getContactFor(member.did); + const oldContact = this.getContactFor(decrMember.did); // if admitted, now register that user if they are not registered - if (member.member.admitted && !oldContact?.registered) { + if ( + decrMember.member.admitted && + !decrMember.isRegistered && + !oldContact?.registered + ) { const contactOldOrNew: Contact = oldContact || { - did: member.did, - name: member.name, - } + did: decrMember.did, + name: decrMember.name, + }; try { const result = await register( this.activeDid, @@ -400,9 +407,9 @@ export default class MembersList extends Vue { contactOldOrNew, ); if (result.success) { - member.member.registered = true; + decrMember.isRegistered = true; if (oldContact) { - await db.contacts.update(member.did, { registered: true }); + await db.contacts.update(decrMember.did, { registered: true }); oldContact.registered = true; } this.$notify( @@ -417,16 +424,18 @@ export default class MembersList extends Vue { } else { throw result; } - // eslint-disable-next-line @typescript-eslint/no-explicit-any + // eslint-disable-next-line @typescript-eslint/no-explicit-any } catch (error: any) { // registration failure is likely explained by a message from the server - const additionalInfo = serverMessageForUser(error) || error?.error || ""; + const additionalInfo = + serverMessageForUser(error) || error?.error || ""; this.$notify( { group: "alert", type: "warning", title: "Registration failed", - text: "They were admitted to the meeting. However, registration failed. You can register them from the contacts screen. " + + text: + "They were admitted to the meeting. However, registration failed. You can register them from the contacts screen. " + additionalInfo, }, 12000, diff --git a/src/views/OnboardMeetingListView.vue b/src/views/OnboardMeetingListView.vue index 35e28053..480dc1cd 100644 --- a/src/views/OnboardMeetingListView.vue +++ b/src/views/OnboardMeetingListView.vue @@ -126,6 +126,7 @@ export default class OnboardMeetingListView extends Vue { attendingMeeting: Meeting | null = null; firstName = ""; isLoading = false; + isRegistered = false; meetings: Meeting[] = []; password = ""; selectedMeeting: Meeting | null = null; @@ -136,6 +137,7 @@ export default class OnboardMeetingListView extends Vue { this.activeDid = settings.activeDid || ""; this.apiServer = settings.apiServer || ""; this.firstName = settings.firstName || ""; + this.isRegistered = !!settings.isRegistered; await this.fetchMeetings(); } @@ -232,6 +234,7 @@ export default class OnboardMeetingListView extends Vue { const memberData = { name: this.firstName, did: this.activeDid, + isRegistered: this.isRegistered, }; const memberDataString = JSON.stringify(memberData); const encryptedMemberData = await encryptMessage( diff --git a/src/views/OnboardMeetingSetupView.vue b/src/views/OnboardMeetingSetupView.vue index 8b1c0048..a81c7605 100644 --- a/src/views/OnboardMeetingSetupView.vue +++ b/src/views/OnboardMeetingSetupView.vue @@ -273,6 +273,7 @@ export default class OnboardMeetingView extends Vue { apiServer = ""; isDeleting = false; isLoading = true; + isRegistered = false; showDeleteConfirm = false; fullName = ""; get minDateTime() { @@ -286,6 +287,7 @@ export default class OnboardMeetingView extends Vue { this.activeDid = settings.activeDid || ""; this.apiServer = settings.apiServer || ""; this.fullName = settings.firstName || ""; + this.isRegistered = !!settings.isRegistered; await this.fetchCurrentMeeting(); this.isLoading = false; @@ -409,6 +411,7 @@ export default class OnboardMeetingView extends Vue { const content = { name: this.newOrUpdatedMeeting.userFullName, did: this.activeDid, + isRegistered: this.isRegistered, }; const encryptedContent = await encryptMessage( JSON.stringify(content), @@ -598,6 +601,7 @@ export default class OnboardMeetingView extends Vue { const content = { name: this.newOrUpdatedMeeting.userFullName, did: this.activeDid, + isRegistered: this.isRegistered, }; const encryptedContent = await encryptMessage( JSON.stringify(content), From 62ae603778c9dfd4f443ca41657d3b8855e5e504 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Thu, 6 Feb 2025 20:16:04 -0700 Subject: [PATCH 03/23] fix linting --- src/libs/util.ts | 2 +- src/views/ContactsView.vue | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/libs/util.ts b/src/libs/util.ts index e7f7ffcf..546fca1f 100644 --- a/src/libs/util.ts +++ b/src/libs/util.ts @@ -125,7 +125,7 @@ export const shortDid = (did: string) => { } else { return did.substring(0, did.indexOf(":", 4) + 7) + "..."; } -} +}; export const nameForDid = ( activeDid: string, diff --git a/src/views/ContactsView.vue b/src/views/ContactsView.vue index 55048773..8e06f1a2 100644 --- a/src/views/ContactsView.vue +++ b/src/views/ContactsView.vue @@ -1391,14 +1391,14 @@ export default class ContactsView extends Vue { const headers = await getHeaders(this.activeDid); const memberResponse = await this.axios.get( this.apiServer + "/api/partner/groupOnboardMember", - { headers } + { headers }, ); if (memberResponse.data.data) { // They're in a meeting, check if they're the host const hostResponse = await this.axios.get( this.apiServer + "/api/partner/groupOnboard", - { headers } + { headers }, ); if (hostResponse.data.data) { @@ -1416,23 +1416,25 @@ export default class ContactsView extends Vue { type: "confirm", title: "Onboarding Meeting", text: "Would you like to start a new meeting?", - onYes: () => { + onYes: async () => { (this.$router as Router).push({ name: "onboard-meeting-setup" }); }, yesText: "Start New Meeting", - onNo: () => { + onNo: async () => { (this.$router as Router).push({ name: "onboard-meeting-list" }); }, - noText: "Join Existing Meeting" + noText: "Join Existing Meeting", }, - -1 + -1, ); } } catch (error) { - logConsoleAndDb("Error checking meeting status:" + errorStringForLog(error)); + logConsoleAndDb( + "Error checking meeting status:" + errorStringForLog(error), + ); this.danger( "There was an error checking your meeting status.", - "Meeting Error" + "Meeting Error", ); } } From ec96bd823548a2afa16865947791b7d6fadee4bc Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Thu, 6 Feb 2025 20:21:02 -0700 Subject: [PATCH 04/23] bump version to 0.3.54 --- CHANGELOG.md | 5 +++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c983e4bc..fff37c3c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.3.54] - 2025.02.06 +### Added +- Group onboarding meetings + + ## [0.3.53] - 2025.01.30 ### Added - Hints for contacting the creator of a project diff --git a/package-lock.json b/package-lock.json index 3d170c6a..d268b2f0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "TimeSafari", - "version": "0.3.54-beta", + "version": "0.3.54", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "TimeSafari", - "version": "0.3.54-beta", + "version": "0.3.54", "dependencies": { "@capacitor/android": "^6.1.2", "@capacitor/cli": "^6.1.2", diff --git a/package.json b/package.json index b90d387d..7bca99cb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "TimeSafari", - "version": "0.3.54-beta", + "version": "0.3.54", "scripts": { "dev": "vite", "serve": "vite preview", From da0f9e75816c3187fd0ea2f7ff809ad3f66c427e Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Fri, 7 Feb 2025 08:46:40 -0700 Subject: [PATCH 05/23] add end time to projects --- README.md | 2 +- src/views/ClaimView.vue | 2 +- src/views/NewEditProjectView.vue | 62 ++++++++++++++++++++++++++++++-- src/views/ProjectViewView.vue | 15 +++++++- 4 files changed, 76 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 58364474..0d823c53 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,7 @@ TIME_SAFARI_APP_TITLE="TimeSafari_Test" VITE_APP_SERVER=https://test.timesafari. (The plain `npm run build` uses the .env.production file.) -* Back up the time-safari/dist folder, then `mv time-safari/dist time-safari-dist-prev.0 && mv crowd-funder-for-time-pwa/dist time-safari/` +* Back up the time-safari/dist folder & deploy: `mv time-safari/dist time-safari-dist-prev.0 && mv crowd-funder-for-time-pwa/dist time-safari/` * Record the new hash in the changelog. Edit package.json to increment version & add "-beta", `npm install`, and commit. Also record what version is on production. diff --git a/src/views/ClaimView.vue b/src/views/ClaimView.vue index e45d7777..e004c61a 100644 --- a/src/views/ClaimView.vue +++ b/src/views/ClaimView.vue @@ -74,7 +74,7 @@
- {{ veriClaim.issuedAt?.replace(/T/, " ").replace(/Z/, " UTC") }} + Recorded {{ veriClaim.issuedAt?.replace(/T/, " ").replace(/Z/, " UTC") }}
diff --git a/src/views/NewEditProjectView.vue b/src/views/NewEditProjectView.vue index 610e0736..2ed4335e 100644 --- a/src/views/NewEditProjectView.vue +++ b/src/views/NewEditProjectView.vue @@ -93,6 +93,9 @@ />
+
+ Starts At +
- {{ zoneName }} + + {{ zoneName }} + +
+ +
+
+ Ends at +
+ + + + {{ zoneName }} +
- {{ startTime }} + Starts {{ startTime }} +
+
+ + Ends {{ endTime }}
@@ -541,6 +545,7 @@ export default class ProjectViewView extends Vue { apiServer = ""; checkingConfirmationForJwtId = ""; description = ""; + endTime = ""; expanded = false; fulfilledByThis: PlanSummaryRecord | null = null; fulfillersToThis: Array = []; @@ -641,6 +646,14 @@ export default class ProjectViewView extends Vue { " " + startDateTime.toLocaleTimeString(); } + const endTime = resp.data.claim?.endTime; + if (endTime != null) { + const endDateTime = new Date(endTime); + this.endTime = + endDateTime.toLocaleDateString() + + " " + + endDateTime.toLocaleTimeString(); + } this.agentDid = resp.data.claim?.agent?.identifier; this.agentDidVisibleToDids = resp.data.claim?.agent?.identifierVisibleToDids || []; From 85c93c060a09689db300e9f6f932a61f5f7b07e2 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Fri, 7 Feb 2025 14:29:32 -0700 Subject: [PATCH 06/23] fix display on a mobile device & mark slower tests --- src/views/ClaimView.vue | 3 +- src/views/NewEditProjectView.vue | 88 +++++++++---------- test-playwright/20-create-project.spec.ts | 1 - test-playwright/25-create-project-x10.spec.ts | 2 +- test-playwright/50-record-offer.spec.ts | 2 + 5 files changed, 49 insertions(+), 47 deletions(-) diff --git a/src/views/ClaimView.vue b/src/views/ClaimView.vue index e004c61a..0fd5de19 100644 --- a/src/views/ClaimView.vue +++ b/src/views/ClaimView.vue @@ -74,7 +74,8 @@
- Recorded {{ veriClaim.issuedAt?.replace(/T/, " ").replace(/Z/, " UTC") }} + Recorded + {{ veriClaim.issuedAt?.replace(/T/, " ").replace(/Z/, " UTC") }}
diff --git a/src/views/NewEditProjectView.vue b/src/views/NewEditProjectView.vue index 2ed4335e..fe2811ed 100644 --- a/src/views/NewEditProjectView.vue +++ b/src/views/NewEditProjectView.vue @@ -71,17 +71,17 @@ -
+
If you want to be contacted, be sure to include your contact information -- just remember that this information is public and saved in a public history.
-
+
{{ fullClaim.description?.length }}/5000 max. characters
@@ -89,55 +89,55 @@ v-model="fullClaim.url" placeholder="Website" autocapitalize="none" - class="block w-full rounded border border-slate-400 mb-4 px-3 py-2" + class="block w-full rounded border border-slate-400 mt-4 px-3 py-2" /> -
-
- Starts At +
+
+ Starts At + +
- - - - {{ zoneName }} - -
-
-
- Ends at +
+ + {{ zoneName }} time zone + +
+ +
+
+ Ends at +
+ +
- - - - {{ zoneName }} -
diff --git a/test-playwright/20-create-project.spec.ts b/test-playwright/20-create-project.spec.ts index 4127f11e..3a5d466b 100644 --- a/test-playwright/20-create-project.spec.ts +++ b/test-playwright/20-create-project.spec.ts @@ -2,7 +2,6 @@ import { test, expect } from '@playwright/test'; import { importUser } from './testUtils'; test('Create new project, then search for it', async ({ page }) => { - test.slow(); // Generate a random string of 16 characters let randomString = Math.random().toString(36).substring(2, 18); diff --git a/test-playwright/25-create-project-x10.spec.ts b/test-playwright/25-create-project-x10.spec.ts index 0d8094b5..44a40da1 100644 --- a/test-playwright/25-create-project-x10.spec.ts +++ b/test-playwright/25-create-project-x10.spec.ts @@ -2,7 +2,7 @@ import { test, expect } from '@playwright/test'; import { importUser, createUniqueStringsArray } from './testUtils'; test('Create 10 new projects', async ({ page }) => { - test.setTimeout(40000); // Set timeout longer since it often fails at 30 seconds + test.slow(); // Set timeout longer since it often fails at 30 seconds const projectCount = 10; diff --git a/test-playwright/50-record-offer.spec.ts b/test-playwright/50-record-offer.spec.ts index bfb6004d..4710fe41 100644 --- a/test-playwright/50-record-offer.spec.ts +++ b/test-playwright/50-record-offer.spec.ts @@ -2,6 +2,8 @@ import { test, expect } from '@playwright/test'; import { importUser } from './testUtils'; test('Record an offer', async ({ page }) => { + test.setTimeout(45000); + // Generate a random string of 3 characters, skipping the "0." at the beginning const randomString = Math.random().toString(36).substring(2, 5); // Standard title prefix From ae12f243ec5d055b7ba83942ba43c65e3bae0f00 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Fri, 7 Feb 2025 14:30:53 -0700 Subject: [PATCH 07/23] bump to version 0.3.55 --- CHANGELOG.md | 5 +++++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fff37c3c..e93e3edc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,11 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [0.3.55] - 2025.02.07 +### Added +- End time for projects + + ## [0.3.54] - 2025.02.06 ### Added - Group onboarding meetings diff --git a/package-lock.json b/package-lock.json index d268b2f0..17084c95 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "TimeSafari", - "version": "0.3.54", + "version": "0.3.55", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "TimeSafari", - "version": "0.3.54", + "version": "0.3.55", "dependencies": { "@capacitor/android": "^6.1.2", "@capacitor/cli": "^6.1.2", diff --git a/package.json b/package.json index 7bca99cb..a0dcc785 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "TimeSafari", - "version": "0.3.54", + "version": "0.3.55", "scripts": { "dev": "vite", "serve": "vite preview", From 2b78307a5198d22e365b467c6e38941b7edbfab4 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Fri, 7 Feb 2025 15:23:12 -0700 Subject: [PATCH 08/23] bump version & add "-beta" --- README.md | 4 ++-- package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 0d823c53..2bd9c9dc 100644 --- a/README.md +++ b/README.md @@ -50,7 +50,7 @@ Look below for the "test-all" instructions. * Put the commit hash in the changelog (which will help you remember to bump the version later). -* Tag with the new version, [online](https://gitea.anomalistdesign.com/trent_larson/crowd-funder-for-time-pwa/releases) or `git tag 0.3.36` && `git push origin 0.3.36`. +* Tag with the new version, [online](https://gitea.anomalistdesign.com/trent_larson/crowd-funder-for-time-pwa/releases) or `git tag 0.3.55 && git push origin 0.3.55`. * For test, build the app (because test server is not yet set up to build): @@ -70,7 +70,7 @@ TIME_SAFARI_APP_TITLE="TimeSafari_Test" VITE_APP_SERVER=https://test.timesafari. * `pkgx +npm sh` - * `cd crowd-funder-for-time-pwa && git checkout master && git pull && git checkout 0.3.36 && npm install && npm run build && cd -` + * `cd crowd-funder-for-time-pwa && git checkout master && git pull && git checkout 0.3.55 && npm install && npm run build && cd -` (The plain `npm run build` uses the .env.production file.) diff --git a/package-lock.json b/package-lock.json index 17084c95..f873b6a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "TimeSafari", - "version": "0.3.55", + "version": "0.3.56-beta", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "TimeSafari", - "version": "0.3.55", + "version": "0.3.56-beta", "dependencies": { "@capacitor/android": "^6.1.2", "@capacitor/cli": "^6.1.2", diff --git a/package.json b/package.json index a0dcc785..e6ac3938 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "TimeSafari", - "version": "0.3.55", + "version": "0.3.56-beta", "scripts": { "dev": "vite", "serve": "vite preview", From 9a6b2fcf0dfda27085cfc5645885e640bfb5d4e4 Mon Sep 17 00:00:00 2001 From: Trent Larson Date: Tue, 11 Feb 2025 08:15:01 -0700 Subject: [PATCH 09/23] for meeting invitees, create their ID and allow them to set a name --- src/components/MembersList.vue | 81 ++++++++---- src/components/UserNameDialog.vue | 19 ++- src/views/OnboardMeetingMembersView.vue | 158 ++++++++++++++++++++++-- src/views/OnboardMeetingSetupView.vue | 9 +- 4 files changed, 222 insertions(+), 45 deletions(-) diff --git a/src/components/MembersList.vue b/src/components/MembersList.vue index b7673add..b1b93fd9 100644 --- a/src/components/MembersList.vue +++ b/src/components/MembersList.vue @@ -1,40 +1,41 @@ + + diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue index 245ca591..44023e84 100644 --- a/src/views/HomeView.vue +++ b/src/views/HomeView.vue @@ -347,9 +347,16 @@
@@ -368,6 +375,8 @@ + + From f4c7805266ecb75630db59b8ddff308ec6ddce44 Mon Sep 17 00:00:00 2001 From: Jason Buchanan Date: Fri, 14 Feb 2025 13:06:36 -0700 Subject: [PATCH 16/23] feat(feed): improving the image viewer, to be more conventional, and also allowing the viewer to download the image on mobile with `...` control --- src/components/ImageViewer.vue | 78 +++++++++++++++++++++++++++------- src/views/HomeView.vue | 24 +++++++++-- 2 files changed, 83 insertions(+), 19 deletions(-) diff --git a/src/components/ImageViewer.vue b/src/components/ImageViewer.vue index f821f0d5..a2bf9f60 100644 --- a/src/components/ImageViewer.vue +++ b/src/components/ImageViewer.vue @@ -3,22 +3,38 @@
- - - expanded shared content + +
+ + + + +
+ + +
+
+ expanded shared content +
+
@@ -26,15 +42,45 @@ diff --git a/src/views/HomeView.vue b/src/views/HomeView.vue index 44023e84..c62d3b43 100644 --- a/src/views/HomeView.vue +++ b/src/views/HomeView.vue @@ -282,7 +282,7 @@ -