Browse Source

fix linting

master
Trent Larson 16 hours ago
parent
commit
820ae727ed
  1. 29
      src/components/ActivityListItem.vue
  2. 62
      src/components/ImageMethodDialog.vue
  3. 5
      src/db/index.ts
  4. 9
      src/services/platforms/CapacitorPlatformService.ts
  5. 4
      src/views/AccountViewView.vue
  6. 3
      src/views/ContactQRScanShowView.vue
  7. 11
      src/views/ContactsView.vue
  8. 11
      src/views/DiscoverView.vue
  9. 2
      src/views/OnboardMeetingMembersView.vue
  10. 13
      src/views/OnboardMeetingSetupView.vue

29
src/components/ActivityListItem.vue

@ -40,10 +40,7 @@
/> />
<div> <div>
<h3 <h3 v-if="record.issuer.known" class="font-semibold leading-tight">
v-if="record.issuer.known"
class="font-semibold leading-tight"
>
{{ record.issuer.displayName }} {{ record.issuer.displayName }}
</h3> </h3>
<p class="ms-auto text-xs text-slate-500 italic"> <p class="ms-auto text-xs text-slate-500 italic">
@ -97,7 +94,9 @@
<div v-if="record.providerPlanName"> <div v-if="record.providerPlanName">
<router-link <router-link
:to="{ :to="{
path: '/project/' + encodeURIComponent(record.providerPlanHandleId || ''), path:
'/project/' +
encodeURIComponent(record.providerPlanHandleId || ''),
}" }"
title="View project details" title="View project details"
> >
@ -125,17 +124,17 @@
</router-link> </router-link>
<font-awesome <font-awesome
v-else v-else
@click="notifyHiddenPerson"
icon="eye-slash" icon="eye-slash"
class="text-slate-300 !size-[3rem] sm:!size-[4rem]" class="text-slate-300 !size-[3rem] sm:!size-[4rem]"
@click="notifyHiddenPerson"
/> />
</div> </div>
<!-- Unknown Person --> <!-- Unknown Person -->
<div v-else> <div v-else>
<font-awesome <font-awesome
@click="notifyUnknownPerson"
icon="person-circle-question" icon="person-circle-question"
class="text-slate-300 text-[3rem] sm:text-[4rem]" class="text-slate-300 text-[3rem] sm:text-[4rem]"
@click="notifyUnknownPerson"
/> />
</div> </div>
</div> </div>
@ -156,7 +155,9 @@
<div <div
class="absolute inset-x-[7rem] sm:inset-x-[12rem] mx-2 top-1/2 -translate-y-1/2" class="absolute inset-x-[7rem] sm:inset-x-[12rem] mx-2 top-1/2 -translate-y-1/2"
> >
<div class="text-sm text-center leading-none font-semibold pe-2 sm:pe-4"> <div
class="text-sm text-center leading-none font-semibold pe-2 sm:pe-4"
>
{{ fetchAmount }} {{ fetchAmount }}
</div> </div>
@ -181,7 +182,9 @@
<div v-if="record.recipientProjectName"> <div v-if="record.recipientProjectName">
<router-link <router-link
:to="{ :to="{
path: '/project/' + encodeURIComponent(record.fulfillsPlanHandleId || ''), path:
'/project/' +
encodeURIComponent(record.fulfillsPlanHandleId || ''),
}" }"
title="View project details" title="View project details"
> >
@ -209,17 +212,17 @@
</router-link> </router-link>
<font-awesome <font-awesome
v-else v-else
@click="notifyHiddenPerson"
icon="eye-slash" icon="eye-slash"
class="text-slate-300 !size-[3rem] sm:!size-[4rem]" class="text-slate-300 !size-[3rem] sm:!size-[4rem]"
@click="notifyHiddenPerson"
/> />
</div> </div>
<!-- Unknown Person --> <!-- Unknown Person -->
<div v-else> <div v-else>
<font-awesome <font-awesome
@click="notifyUnknownPerson"
icon="person-circle-question" icon="person-circle-question"
class="text-slate-300 text-[3rem] sm:text-[4rem]" class="text-slate-300 text-[3rem] sm:text-[4rem]"
@click="notifyUnknownPerson"
/> />
</div> </div>
</div> </div>
@ -273,7 +276,7 @@ export default class ActivityListItem extends Vue {
title: "Person Outside Your Network", title: "Person Outside Your Network",
text: "This person is not visible to you.", text: "This person is not visible to you.",
}, },
3000 3000,
); );
} }
@ -285,7 +288,7 @@ export default class ActivityListItem extends Vue {
title: "Unidentified Person", title: "Unidentified Person",
text: "Nobody specific was recognized.", text: "Nobody specific was recognized.",
}, },
3000 3000,
); );
} }

62
src/components/ImageMethodDialog.vue

@ -4,7 +4,9 @@
<div class="text-lg text-center font-bold relative"> <div class="text-lg text-center font-bold relative">
<h1 id="ViewHeading" class="text-center font-bold"> <h1 id="ViewHeading" class="text-center font-bold">
<span v-if="uploading">Uploading Image&hellip;</span> <span v-if="uploading">Uploading Image&hellip;</span>
<span v-else-if="blob">{{ crop ? 'Crop Image' : 'Preview Image' }}</span> <span v-else-if="blob">{{
crop ? "Crop Image" : "Preview Image"
}}</span>
<span v-else-if="showCameraPreview">Upload Image</span> <span v-else-if="showCameraPreview">Upload Image</span>
<span v-else>Add Photo</span> <span v-else>Add Photo</span>
</h1> </h1>
@ -119,7 +121,9 @@
playsinline playsinline
muted muted
></video> ></video>
<div class="absolute bottom-4 inset-x-0 flex items-center justify-center gap-4"> <div
class="absolute bottom-4 inset-x-0 flex items-center justify-center gap-4"
>
<button <button
class="bg-white text-slate-800 p-3 rounded-full text-2xl leading-none" class="bg-white text-slate-800 p-3 rounded-full text-2xl leading-none"
@click="capturePhoto" @click="capturePhoto"
@ -278,9 +282,9 @@ const inputImageFileNameRef = ref<Blob>();
}, },
defaultCameraMode: { defaultCameraMode: {
type: String, type: String,
default: 'environment', default: "environment",
validator: (value: string) => ['environment', 'user'].includes(value) validator: (value: string) => ["environment", "user"].includes(value),
} },
}, },
}) })
export default class ImageMethodDialog extends Vue { export default class ImageMethodDialog extends Vue {
@ -323,7 +327,7 @@ export default class ImageMethodDialog extends Vue {
private cameraStream: MediaStream | null = null; private cameraStream: MediaStream | null = null;
/** Current camera facing mode */ /** Current camera facing mode */
private currentFacingMode: 'environment' | 'user' = 'environment'; private currentFacingMode: "environment" | "user" = "environment";
private platformService = PlatformServiceFactory.getInstance(); private platformService = PlatformServiceFactory.getInstance();
URL = window.URL || window.webkitURL; URL = window.URL || window.webkitURL;
@ -391,7 +395,7 @@ export default class ImageMethodDialog extends Vue {
this.crop = !!crop; this.crop = !!crop;
this.imageCallback = setImageFn; this.imageCallback = setImageFn;
this.visible = true; this.visible = true;
this.currentFacingMode = this.defaultCameraMode as 'environment' | 'user'; this.currentFacingMode = this.defaultCameraMode as "environment" | "user";
// Start camera preview immediately // Start camera preview immediately
logger.debug("Starting camera preview from open()"); logger.debug("Starting camera preview from open()");
@ -465,7 +469,10 @@ export default class ImageMethodDialog extends Vue {
logger.debug("Current showCameraPreview state:", this.showCameraPreview); logger.debug("Current showCameraPreview state:", this.showCameraPreview);
logger.debug("Platform capabilities:", this.platformCapabilities); logger.debug("Platform capabilities:", this.platformCapabilities);
logger.debug("MediaDevices available:", !!navigator.mediaDevices); logger.debug("MediaDevices available:", !!navigator.mediaDevices);
logger.debug("getUserMedia available:", !!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia)); logger.debug(
"getUserMedia available:",
!!(navigator.mediaDevices && navigator.mediaDevices.getUserMedia),
);
try { try {
this.cameraState = "initializing"; this.cameraState = "initializing";
@ -492,13 +499,16 @@ export default class ImageMethodDialog extends Vue {
videoElement.srcObject = stream; videoElement.srcObject = stream;
await new Promise((resolve) => { await new Promise((resolve) => {
videoElement.onloadedmetadata = () => { videoElement.onloadedmetadata = () => {
videoElement.play().then(() => { videoElement
logger.debug("Video element started playing"); .play()
resolve(true); .then(() => {
}).catch(error => { logger.debug("Video element started playing");
logger.error("Error playing video:", error); resolve(true);
throw error; })
}); .catch((error) => {
logger.error("Error playing video:", error);
throw error;
});
}; };
}); });
} else { } else {
@ -510,17 +520,16 @@ export default class ImageMethodDialog extends Vue {
let errorMessage = let errorMessage =
error instanceof Error ? error.message : "Failed to access camera"; error instanceof Error ? error.message : "Failed to access camera";
if ( if (
error instanceof Error && ( error instanceof Error &&
error.name === "NotReadableError" || (error.name === "NotReadableError" || error.name === "TrackStartError")
error.name === "TrackStartError" ) {
)) {
errorMessage = errorMessage =
"Camera is in use by another application. Please close any other apps or browser tabs using the camera and try again."; "Camera is in use by another application. Please close any other apps or browser tabs using the camera and try again.";
} else if ( } else if (
error instanceof Error && ( error instanceof Error &&
error.name === "NotAllowedError" || (error.name === "NotAllowedError" ||
error.name === "PermissionDeniedError" error.name === "PermissionDeniedError")
)) { ) {
errorMessage = errorMessage =
"Camera access was denied. Please allow camera access in your browser settings."; "Camera access was denied. Please allow camera access in your browser settings.";
} }
@ -590,11 +599,12 @@ export default class ImageMethodDialog extends Vue {
async rotateCamera() { async rotateCamera() {
// Toggle between front and back cameras // Toggle between front and back cameras
this.currentFacingMode = this.currentFacingMode === 'environment' ? 'user' : 'environment'; this.currentFacingMode =
this.currentFacingMode === "environment" ? "user" : "environment";
// Stop current stream // Stop current stream
if (this.cameraStream) { if (this.cameraStream) {
this.cameraStream.getTracks().forEach(track => track.stop()); this.cameraStream.getTracks().forEach((track) => track.stop());
this.cameraStream = null; this.cameraStream = null;
} }

5
src/db/index.ts

@ -96,10 +96,7 @@ db.on("populate", async () => {
try { try {
await db.settings.add(DEFAULT_SETTINGS); await db.settings.add(DEFAULT_SETTINGS);
} catch (error) { } catch (error) {
logger.error( logger.error("Error populating the database with default settings:", error);
"Error populating the database with default settings:",
error,
);
} }
}); });

9
src/services/platforms/CapacitorPlatformService.ts

@ -1,5 +1,10 @@
import { Filesystem, Directory, Encoding } from "@capacitor/filesystem"; import { Filesystem, Directory, Encoding } from "@capacitor/filesystem";
import { Camera, CameraResultType, CameraSource, CameraDirection } from "@capacitor/camera"; import {
Camera,
CameraResultType,
CameraSource,
CameraDirection,
} from "@capacitor/camera";
import { Share } from "@capacitor/share"; import { Share } from "@capacitor/share";
import { import {
SQLiteConnection, SQLiteConnection,
@ -696,7 +701,7 @@ export class CapacitorPlatformService implements PlatformService {
* @returns Promise that resolves when the camera is rotated * @returns Promise that resolves when the camera is rotated
*/ */
async rotateCamera(): Promise<void> { async rotateCamera(): Promise<void> {
this.currentDirection = this.currentDirection === 'BACK' ? 'FRONT' : 'BACK'; this.currentDirection = this.currentDirection === "BACK" ? "FRONT" : "BACK";
logger.debug(`Camera rotated to ${this.currentDirection} camera`); logger.debug(`Camera rotated to ${this.currentDirection} camera`);
} }

4
src/views/AccountViewView.vue

@ -593,9 +593,7 @@
</router-link> </router-link>
<div id="sectionImportContactsSettings" class="mt-4"> <div id="sectionImportContactsSettings" class="mt-4">
<h2 class="text-slate-500 text-sm font-bold"> <h2 class="text-slate-500 text-sm font-bold">Import Contacts</h2>
Import Contacts
</h2>
<div class="ml-4 mt-2"> <div class="ml-4 mt-2">
<input type="file" class="ml-2" @change="uploadImportFile" /> <input type="file" class="ml-2" @change="uploadImportFile" />

3
src/views/ContactQRScanShowView.vue

@ -983,7 +983,8 @@ export default class ContactQRScanShow extends Vue {
) as HTMLVideoElement; ) as HTMLVideoElement;
if (videoElement) { if (videoElement) {
// Mirror if it's desktop or front camera on mobile // Mirror if it's desktop or front camera on mobile
const shouldMirror = this.isDesktop || (this.isFrontCamera && !this.isDesktop); const shouldMirror =
this.isDesktop || (this.isFrontCamera && !this.isDesktop);
videoElement.style.transform = shouldMirror ? "scaleX(-1)" : "none"; videoElement.style.transform = shouldMirror ? "scaleX(-1)" : "none";
} }
} }

11
src/views/ContactsView.vue

@ -59,7 +59,7 @@
<font-awesome <font-awesome
icon="chair" icon="chair"
class="fa-fw text-2xl" class="fa-fw text-2xl"
@click="this.$router.push({ name: 'onboard-meeting-list' })" @click="$router.push({ name: 'onboard-meeting-list' })"
/> />
</span> </span>
</span> </span>
@ -193,7 +193,9 @@
" "
/> />
<div class="flex-shrink-0 w-12 h-12 flex items-center justify-center"> <div
class="flex-shrink-0 w-12 h-12 flex items-center justify-center"
>
<EntityIcon <EntityIcon
:contact="contact" :contact="contact"
:icon-size="48" :icon-size="48"
@ -230,7 +232,10 @@
</span> </span>
</div> </div>
<div v-if="showGiveNumbers && contact.did != activeDid" class="flex gap-2 items-center"> <div
v-if="showGiveNumbers && contact.did != activeDid"
class="flex gap-2 items-center"
>
<button <button
class="text-sm bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-1.5 rounded-l-md" class="text-sm bg-gradient-to-b from-blue-400 to-blue-700 shadow-[inset_0_-1px_0_0_rgba(0,0,0,0.5)] text-white px-2 py-1.5 rounded-l-md"
:title="givenToMeDescriptions[contact.did] || ''" :title="givenToMeDescriptions[contact.did] || ''"

11
src/views/DiscoverView.vue

@ -162,12 +162,12 @@
<div class="mt-6 h-96 w-full mx-auto"> <div class="mt-6 h-96 w-full mx-auto">
<l-map <l-map
ref="projectMap" ref="projectMap"
class="z-40"
@ready="onMapReady" @ready="onMapReady"
@moveend="onMoveEnd" @moveend="onMoveEnd"
@movestart="onMoveStart" @movestart="onMoveStart"
@zoomend="onZoomEnd" @zoomend="onZoomEnd"
@zoomstart="onZoomStart" @zoomstart="onZoomStart"
class="z-40"
> >
<l-tile-layer <l-tile-layer
url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png" url="https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png"
@ -198,17 +198,18 @@
--> -->
</span> </span>
<span v-else-if="isAnywhereActive" <span v-else-if="isAnywhereActive"
>No {{ isProjectsActive ? 'projects' : 'people' }} were found with that search.</span >No {{ isProjectsActive ? "projects" : "people" }} were found with
that search.</span
> >
</p> </p>
</div> </div>
<!-- Results List --> <!-- Results List -->
<InfiniteScroll @reached-bottom="loadMoreData"> <InfiniteScroll @reached-bottom="loadMoreData">
<ul <ul
id="listDiscoverResults"
class="border-t border-slate-300 mt-6"
v-if="projects.length > 0 || userProfiles.length > 0" v-if="projects.length > 0 || userProfiles.length > 0"
id="listDiscoverResults"
class="border-t border-slate-300 mt-6"
> >
<!-- Projects List --> <!-- Projects List -->
<template v-if="isProjectsActive"> <template v-if="isProjectsActive">

2
src/views/OnboardMeetingMembersView.vue

@ -152,7 +152,7 @@ export default class OnboardMeetingMembersView extends Vue {
// Fetch the meeting details to get the project link // Fetch the meeting details to get the project link
const meetingResponse = await this.axios.get( const meetingResponse = await this.axios.get(
`${this.apiServer}/api/partner/groupOnboard/${this.groupId}`, `${this.apiServer}/api/partner/groupOnboard/${this.groupId}`,
{ headers } { headers },
); );
if (meetingResponse.data?.data?.projectLink) { if (meetingResponse.data?.data?.projectLink) {
this.projectLink = meetingResponse.data.data.projectLink; this.projectLink = meetingResponse.data.data.projectLink;

13
src/views/OnboardMeetingSetupView.vue

@ -93,7 +93,8 @@
v-if=" v-if="
!isLoading && !isLoading &&
isInEditOrCreateMode() && isInEditOrCreateMode() &&
newOrUpdatedMeetingInputs != null /* duplicate check is for typechecks */ newOrUpdatedMeetingInputs !=
null /* duplicate check is for typechecks */
" "
class="mt-8" class="mt-8"
> >
@ -169,7 +170,9 @@
</div> </div>
<div> <div>
<label for="projectLink" class="block text-sm font-medium text-gray-700" <label
for="projectLink"
class="block text-sm font-medium text-gray-700"
>Project Link</label >Project Link</label
> >
<input <input
@ -217,8 +220,8 @@
</div> </div>
<div <div
class="flex items-center gap-2 cursor-pointer text-blue-600" class="flex items-center gap-2 cursor-pointer text-blue-600"
@click="copyMembersLinkToClipboard"
title="Click to copy link for members" title="Click to copy link for members"
@click="copyMembersLinkToClipboard"
> >
<span> <span>
&bull; Page for Members &bull; Page for Members
@ -344,7 +347,9 @@ export default class OnboardMeetingView extends Vue {
} }
isInCreateMode(): boolean { isInCreateMode(): boolean {
return this.newOrUpdatedMeetingInputs != null && this.currentMeeting == null; return (
this.newOrUpdatedMeetingInputs != null && this.currentMeeting == null
);
} }
isInEditOrCreateMode(): boolean { isInEditOrCreateMode(): boolean {

Loading…
Cancel
Save