diff --git a/src/hooks/backend-api-hooks/internet-dependant/useAssignDraftTaskNow.ts b/src/hooks/backend-api-hooks/internet-dependant/useAssignDraftTaskNow.ts
index 8debcf4..0d7a5ac 100644
--- a/src/hooks/backend-api-hooks/internet-dependant/useAssignDraftTaskNow.ts
+++ b/src/hooks/backend-api-hooks/internet-dependant/useAssignDraftTaskNow.ts
@@ -1,5 +1,5 @@
import { DraftTaskAssignmentResponse, Project } from "@/types/interfaces";
-import { alertError, alertSuccess, dbg } from "@/lib/utils";
+import { alertError, alertSuccess, dbg } from "@/lib/logging";
import { useClient } from "@/providers/ReactQueryProvider";
import { useMutation } from "@tanstack/react-query";
import { invoke } from "@tauri-apps/api/core";
diff --git a/src/hooks/backend-api-hooks/internet-dependant/useAssignTaskNow.ts b/src/hooks/backend-api-hooks/internet-dependant/useAssignTaskNow.ts
index 2bc3f23..115aaa3 100644
--- a/src/hooks/backend-api-hooks/internet-dependant/useAssignTaskNow.ts
+++ b/src/hooks/backend-api-hooks/internet-dependant/useAssignTaskNow.ts
@@ -1,5 +1,5 @@
import { Project, Task } from "@/types/interfaces";
-import { alertError, alertSuccess, dbg } from "@/lib/utils";
+import { alertError, alertSuccess, dbg } from "@/lib/logging";
import { useClient } from "@/providers/ReactQueryProvider";
import { useMutation } from "@tanstack/react-query";
import { invoke } from "@tauri-apps/api/core";
diff --git a/src/hooks/backend-api-hooks/internet-dependant/useCreateBacklogTask.ts b/src/hooks/backend-api-hooks/internet-dependant/useCreateBacklogTask.ts
index 7ab2f33..756264e 100644
--- a/src/hooks/backend-api-hooks/internet-dependant/useCreateBacklogTask.ts
+++ b/src/hooks/backend-api-hooks/internet-dependant/useCreateBacklogTask.ts
@@ -1,5 +1,5 @@
import { NewTaskPayload, Project, Task } from "@/types/interfaces";
-import { alertError, alertSuccess, dbg } from "@/lib/utils";
+import { alertError, alertSuccess, dbg } from "@/lib/logging";
import { useClient } from "@/providers/ReactQueryProvider";
import { useMutation } from "@tanstack/react-query";
import { invoke } from "@tauri-apps/api/core";
diff --git a/src/hooks/backend-api-hooks/internet-dependant/useCreateProject.ts b/src/hooks/backend-api-hooks/internet-dependant/useCreateProject.ts
index d24ab30..e81d04a 100644
--- a/src/hooks/backend-api-hooks/internet-dependant/useCreateProject.ts
+++ b/src/hooks/backend-api-hooks/internet-dependant/useCreateProject.ts
@@ -1,5 +1,5 @@
import { NewProjectPayload, Project } from "@/types/interfaces";
-import { alertError, alertSuccess, dbg } from "@/lib/utils";
+import { alertError, alertSuccess, dbg } from "@/lib/logging";
import { useClient } from "@/providers/ReactQueryProvider";
import { useMutation } from "@tanstack/react-query";
import { invoke } from "@tauri-apps/api/core";
diff --git a/src/hooks/backend-api-hooks/internet-dependant/useCreateTask.ts b/src/hooks/backend-api-hooks/internet-dependant/useCreateTask.ts
index f46b6ef..be90117 100644
--- a/src/hooks/backend-api-hooks/internet-dependant/useCreateTask.ts
+++ b/src/hooks/backend-api-hooks/internet-dependant/useCreateTask.ts
@@ -1,5 +1,5 @@
import { NewTaskPayload, Project, Task } from "@/types/interfaces";
-import { alertError, alertSuccess, dbg } from "@/lib/utils";
+import { alertError, alertSuccess, dbg } from "@/lib/logging";
import { useClient } from "@/providers/ReactQueryProvider";
import { useMutation } from "@tanstack/react-query";
import { invoke } from "@tauri-apps/api/core";
diff --git a/src/hooks/backend-api-hooks/internet-dependant/useDeleteDraftTask.ts b/src/hooks/backend-api-hooks/internet-dependant/useDeleteDraftTask.ts
index 58a1d31..d45c21d 100644
--- a/src/hooks/backend-api-hooks/internet-dependant/useDeleteDraftTask.ts
+++ b/src/hooks/backend-api-hooks/internet-dependant/useDeleteDraftTask.ts
@@ -1,5 +1,5 @@
import { Project } from "@/types/interfaces";
-import { alertError, alertSuccess, dbg } from "@/lib/utils";
+import { alertError, alertSuccess, dbg } from "@/lib/logging";
import { useClient } from "@/providers/ReactQueryProvider";
import { useMutation } from "@tanstack/react-query";
import { invoke } from "@tauri-apps/api/core";
diff --git a/src/hooks/backend-api-hooks/internet-dependant/useDeleteTask.ts b/src/hooks/backend-api-hooks/internet-dependant/useDeleteTask.ts
index 81d7877..e8ae1ae 100644
--- a/src/hooks/backend-api-hooks/internet-dependant/useDeleteTask.ts
+++ b/src/hooks/backend-api-hooks/internet-dependant/useDeleteTask.ts
@@ -1,5 +1,5 @@
import { Project } from "@/types/interfaces";
-import { alertError, alertSuccess, dbg } from "@/lib/utils";
+import { alertError, alertSuccess, dbg } from "@/lib/logging";
import { useClient } from "@/providers/ReactQueryProvider";
import { useMutation } from "@tanstack/react-query";
import { invoke } from "@tauri-apps/api/core";
diff --git a/src/hooks/backend-api-hooks/internet-dependant/useEditDraftTask.ts b/src/hooks/backend-api-hooks/internet-dependant/useEditDraftTask.ts
index fe6a84c..a6657f0 100644
--- a/src/hooks/backend-api-hooks/internet-dependant/useEditDraftTask.ts
+++ b/src/hooks/backend-api-hooks/internet-dependant/useEditDraftTask.ts
@@ -1,5 +1,5 @@
import { DraftTask, NewDraftTaskPayload, Project } from "@/types/interfaces";
-import { alertError, alertSuccess, dbg } from "@/lib/utils";
+import { alertError, alertSuccess, dbg } from "@/lib/logging";
import { useClient } from "@/providers/ReactQueryProvider";
import { useMutation } from "@tanstack/react-query";
import { invoke } from "@tauri-apps/api/core";
diff --git a/src/hooks/backend-api-hooks/internet-dependant/useEditTask.ts b/src/hooks/backend-api-hooks/internet-dependant/useEditTask.ts
index b2a1ffb..5545265 100644
--- a/src/hooks/backend-api-hooks/internet-dependant/useEditTask.ts
+++ b/src/hooks/backend-api-hooks/internet-dependant/useEditTask.ts
@@ -1,5 +1,5 @@
import { NewTaskPayload, Project, Task } from "@/types/interfaces";
-import { alertError, alertSuccess, dbg } from "@/lib/utils";
+import { alertError, alertSuccess, dbg } from "@/lib/logging";
import { useClient } from "@/providers/ReactQueryProvider";
import { useMutation } from "@tanstack/react-query";
import { invoke } from "@tauri-apps/api/core";
diff --git a/src/hooks/backend-api-hooks/internet-dependant/useSearchUsers.ts b/src/hooks/backend-api-hooks/internet-dependant/useSearchUsers.ts
index 5900eba..d80c7e5 100644
--- a/src/hooks/backend-api-hooks/internet-dependant/useSearchUsers.ts
+++ b/src/hooks/backend-api-hooks/internet-dependant/useSearchUsers.ts
@@ -1,5 +1,5 @@
import { Author } from "@/types/interfaces";
-import { alertError, logInfo } from "@/lib/utils";
+import { alertError, logInfo } from "@/lib/logging";
import { useQuery } from "@tanstack/react-query";
import { invoke } from "@tauri-apps/api/core";
import { useState } from "react";
diff --git a/src/hooks/backend-api-hooks/internet-dependant/useSyncProjectWithGitHub.ts b/src/hooks/backend-api-hooks/internet-dependant/useSyncProjectWithGitHub.ts
index 081ff16..9274231 100644
--- a/src/hooks/backend-api-hooks/internet-dependant/useSyncProjectWithGitHub.ts
+++ b/src/hooks/backend-api-hooks/internet-dependant/useSyncProjectWithGitHub.ts
@@ -1,6 +1,6 @@
import useSettings from "@/hooks/route-hooks/useSettings";
import { DEFAULT_PROJECT_SYNC_INTERVAL_MINS } from "@/lib/constants";
-import { alertError, alertInfo, alertSuccess, dbg } from "@/lib/utils";
+import { alertError, alertInfo, alertSuccess, dbg } from "@/lib/logging";
import { useConnectionStatus } from "@/providers/ConnectionStatusProvider";
import { useClient } from "@/providers/ReactQueryProvider";
import { useSyncedProjects } from "@/providers/SyncedProjectsProvider";
diff --git a/src/hooks/backend-api-hooks/internet-dependant/useSyncProjectsList.ts b/src/hooks/backend-api-hooks/internet-dependant/useSyncProjectsList.ts
index 7f49a41..5ad911f 100644
--- a/src/hooks/backend-api-hooks/internet-dependant/useSyncProjectsList.ts
+++ b/src/hooks/backend-api-hooks/internet-dependant/useSyncProjectsList.ts
@@ -1,4 +1,4 @@
-import { alertError, alertInfo, dbg } from "@/lib/utils";
+import { alertError, alertInfo, dbg } from "@/lib/logging";
import { useConnectionStatus } from "@/providers/ConnectionStatusProvider";
import { useClient } from "@/providers/ReactQueryProvider";
import { useMutation } from "@tanstack/react-query";
diff --git a/src/hooks/backend-api-hooks/internet-dependant/useSyncTaskActivity.ts b/src/hooks/backend-api-hooks/internet-dependant/useSyncTaskActivity.ts
index 7902d07..85beb42 100644
--- a/src/hooks/backend-api-hooks/internet-dependant/useSyncTaskActivity.ts
+++ b/src/hooks/backend-api-hooks/internet-dependant/useSyncTaskActivity.ts
@@ -1,4 +1,4 @@
-import { alertSuccess, dbg } from "@/lib/utils";
+import { alertSuccess, dbg } from "@/lib/logging";
import { useConnectionStatus } from "@/providers/ConnectionStatusProvider";
import { useClient } from "@/providers/ReactQueryProvider";
import { ActivitySyncResponse, Project } from "@/types/interfaces";
diff --git a/src/hooks/backend-api-hooks/internet-dependant/useUpdateGeneralProjectMetadata.ts b/src/hooks/backend-api-hooks/internet-dependant/useUpdateGeneralProjectMetadata.ts
index 202f33d..ac1183f 100644
--- a/src/hooks/backend-api-hooks/internet-dependant/useUpdateGeneralProjectMetadata.ts
+++ b/src/hooks/backend-api-hooks/internet-dependant/useUpdateGeneralProjectMetadata.ts
@@ -1,4 +1,5 @@
-import { alertError, alertSuccess, dbg, stringifyAndRemoveQuotes } from "@/lib/utils";
+import { alertError, alertSuccess, dbg } from "@/lib/logging";
+import { stringifyAndRemoveQuotes } from "@/lib/utils";
import { useConnectionStatus } from "@/providers/ConnectionStatusProvider";
import { Project, ProjectPatchArgs } from "@/types/interfaces";
import { useMutation } from "@tanstack/react-query";
diff --git a/src/hooks/backend-api-hooks/internet-dependant/useUpdateProjectTeam.ts b/src/hooks/backend-api-hooks/internet-dependant/useUpdateProjectTeam.ts
index 1d0db0b..5d4abe7 100644
--- a/src/hooks/backend-api-hooks/internet-dependant/useUpdateProjectTeam.ts
+++ b/src/hooks/backend-api-hooks/internet-dependant/useUpdateProjectTeam.ts
@@ -1,4 +1,4 @@
-import { alertError, alertSuccess, dbg } from "@/lib/utils";
+import { alertError, alertSuccess, dbg } from "@/lib/logging";
import { useConnectionStatus } from "@/providers/ConnectionStatusProvider";
import { ProjectPatchArgs } from "@/types/interfaces";
import { useMutation } from "@tanstack/react-query";
diff --git a/src/hooks/backend-api-hooks/internet-independant/useCreateDraftTask.ts b/src/hooks/backend-api-hooks/internet-independant/useCreateDraftTask.ts
index 0dcf81e..1b27387 100644
--- a/src/hooks/backend-api-hooks/internet-independant/useCreateDraftTask.ts
+++ b/src/hooks/backend-api-hooks/internet-independant/useCreateDraftTask.ts
@@ -1,5 +1,5 @@
import { DraftTask, NewDraftTaskPayload, Project } from "@/types/interfaces";
-import { alertError, alertSuccess, dbg } from "@/lib/utils";
+import { alertError, alertSuccess, dbg } from "@/lib/logging";
import { useClient } from "@/providers/ReactQueryProvider";
import { useMutation } from "@tanstack/react-query";
import { invoke } from "@tauri-apps/api/core";
diff --git a/src/hooks/backend-api-hooks/internet-independant/useDeleteProjectLocally.ts b/src/hooks/backend-api-hooks/internet-independant/useDeleteProjectLocally.ts
index 7812ca7..c0ed3cb 100644
--- a/src/hooks/backend-api-hooks/internet-independant/useDeleteProjectLocally.ts
+++ b/src/hooks/backend-api-hooks/internet-independant/useDeleteProjectLocally.ts
@@ -3,7 +3,7 @@ import { Project } from "@/types/interfaces";
import { useClient } from "@/providers/ReactQueryProvider";
import { useMutation } from "@tanstack/react-query";
import { useNavigate } from "react-router";
-import { alertError, alertSuccess, dbg } from "@/lib/utils";
+import { alertError, alertSuccess, dbg } from "@/lib/logging";
export default function useDeleteProjectLocally(projectId: string | undefined) {
const client = useClient();
diff --git a/src/hooks/backend-api-hooks/internet-independant/useDeleteProjectPermanently.ts b/src/hooks/backend-api-hooks/internet-independant/useDeleteProjectPermanently.ts
index e9812f3..89c5372 100644
--- a/src/hooks/backend-api-hooks/internet-independant/useDeleteProjectPermanently.ts
+++ b/src/hooks/backend-api-hooks/internet-independant/useDeleteProjectPermanently.ts
@@ -4,7 +4,7 @@ import { useClient } from "@/providers/ReactQueryProvider";
import { useMutation } from "@tanstack/react-query";
import { useNavigate } from "react-router";
import { useConnectionStatus } from "@/providers/ConnectionStatusProvider";
-import { alertError, alertSuccess, dbg } from "@/lib/utils";
+import { alertError, alertSuccess, dbg } from "@/lib/logging";
export default function useDeleteProjectPermanently(projectId: string | undefined) {
const client = useClient();
diff --git a/src/hooks/backend-api-hooks/internet-independant/useGetUser.ts b/src/hooks/backend-api-hooks/internet-independant/useGetUser.ts
index f74745e..6c94682 100644
--- a/src/hooks/backend-api-hooks/internet-independant/useGetUser.ts
+++ b/src/hooks/backend-api-hooks/internet-independant/useGetUser.ts
@@ -1,6 +1,6 @@
import { STORE_PATH } from "@/lib/constants";
import { Author } from "@/types/interfaces";
-import { logInfo } from "@/lib/utils";
+import { logInfo } from "@/lib/logging";
import { useQuery } from "@tanstack/react-query";
import { invoke } from "@tauri-apps/api/core";
import { load } from "@tauri-apps/plugin-store";
diff --git a/src/hooks/backend-api-hooks/internet-independant/useLocalProjectsList.ts b/src/hooks/backend-api-hooks/internet-independant/useLocalProjectsList.ts
index 90b6729..3614aad 100644
--- a/src/hooks/backend-api-hooks/internet-independant/useLocalProjectsList.ts
+++ b/src/hooks/backend-api-hooks/internet-independant/useLocalProjectsList.ts
@@ -3,7 +3,7 @@ import { Project } from "@/types/interfaces";
import { useQuery } from "@tanstack/react-query";
import { load } from "@tauri-apps/plugin-store";
import useSyncProjectsList from "../internet-dependant/useSyncProjectsList";
-import { alertError, dbg } from "@/lib/utils";
+import { alertError, dbg } from "@/lib/logging";
import React from "react";
import { toast } from "sonner";
diff --git a/src/hooks/backend-api-hooks/internet-independant/useSignout.ts b/src/hooks/backend-api-hooks/internet-independant/useSignout.ts
index 670248b..714f9d5 100644
--- a/src/hooks/backend-api-hooks/internet-independant/useSignout.ts
+++ b/src/hooks/backend-api-hooks/internet-independant/useSignout.ts
@@ -2,7 +2,7 @@ import { load } from "@tauri-apps/plugin-store";
import { STORE_PATH } from "@/lib/constants";
import { useMutation } from "@tanstack/react-query";
import { useNavigate } from "react-router";
-import { alertError, alertSuccess, logInfo } from "@/lib/utils";
+import { alertError, alertSuccess, logInfo } from "@/lib/logging";
import { useClient } from "@/providers/ReactQueryProvider";
export default function useSignout() {
diff --git a/src/hooks/component-hooks/useDevKit.ts b/src/hooks/component-hooks/useDevKit.ts
index 507b8c3..2258bbf 100644
--- a/src/hooks/component-hooks/useDevKit.ts
+++ b/src/hooks/component-hooks/useDevKit.ts
@@ -1,5 +1,5 @@
import { STORE_PATH } from "@/lib/constants";
-import { alertError, alertInfo, logInfo } from "@/lib/utils";
+import { alertError, alertInfo, logInfo } from "@/lib/logging";
import { invoke } from "@tauri-apps/api/core";
import { load } from "@tauri-apps/plugin-store";
import { useState } from "react";
diff --git a/src/hooks/component-hooks/useKanbanDraftTaskCard.tsx b/src/hooks/component-hooks/useKanbanDraftTaskCard.tsx
index b35026a..b8f83aa 100644
--- a/src/hooks/component-hooks/useKanbanDraftTaskCard.tsx
+++ b/src/hooks/component-hooks/useKanbanDraftTaskCard.tsx
@@ -2,7 +2,8 @@ import { DraftTask, Project } from "@/types/interfaces";
import { useState } from "react";
import { useSearchParams } from "react-router";
import useDeleteDraftTask from "../backend-api-hooks/internet-dependant/useDeleteDraftTask";
-import { alertInfo, wait } from "@/lib/utils";
+import { wait } from "@/lib/utils";
+import { alertInfo } from "@/lib/logging";
import useAssignDraftTaskNow from "../backend-api-hooks/internet-dependant/useAssignDraftTaskNow";
export default function useKanbanDraftTaskCard(draft: DraftTask, project: Project) {
diff --git a/src/hooks/component-hooks/useKanbanTaskCard.tsx b/src/hooks/component-hooks/useKanbanTaskCard.tsx
index 57dcb5d..26b8da3 100644
--- a/src/hooks/component-hooks/useKanbanTaskCard.tsx
+++ b/src/hooks/component-hooks/useKanbanTaskCard.tsx
@@ -2,9 +2,10 @@ import { Project, Task } from "@/types/interfaces";
import { useState } from "react";
import { useSearchParams } from "react-router";
import useAssignTaskNow from "../backend-api-hooks/internet-dependant/useAssignTaskNow";
-import { alertInfo } from "@/lib/utils";
+import { alertInfo } from "@/lib/logging";
import useDeleteTask from "../backend-api-hooks/internet-dependant/useDeleteTask";
import useSyncTaskActivity from "../backend-api-hooks/internet-dependant/useSyncTaskActivity";
+import { dbg } from "@/lib/logging";
export default function useKanbanTaskCard(task: Task, project: Project) {
const [open, setOpen] = useState(false);
@@ -15,7 +16,7 @@ export default function useKanbanTaskCard(task: Task, project: Project) {
const { isPending: isActivitySyncing, syncTaskActivity } = useSyncTaskActivity(project);
function editTask() {
- console.log("Editing task", task.inner_issue.id);
+ dbg("Editing task", task.inner_issue.id);
setSearchParams((prev) => {
prev.set("edit_task", task.inner_issue.id.toString());
return prev;
diff --git a/src/hooks/component-hooks/useNewProjectForm.ts b/src/hooks/component-hooks/useNewProjectForm.ts
index d6582c7..2c09dba 100644
--- a/src/hooks/component-hooks/useNewProjectForm.ts
+++ b/src/hooks/component-hooks/useNewProjectForm.ts
@@ -1,7 +1,7 @@
import useCreateProject from "../backend-api-hooks/internet-dependant/useCreateProject";
import { NewProjectPayload } from "@/types/interfaces";
import { FormEvent } from "react";
-import { dbg } from "@/lib/utils";
+import { dbg } from "@/lib/logging";
export default function useNewProjectForm() {
const { errorMessage: projectCreationErr, isPending, createProject } = useCreateProject();
diff --git a/src/hooks/component-hooks/useNewTaskForm.tsx b/src/hooks/component-hooks/useNewTaskForm.tsx
index f39e286..30b7007 100644
--- a/src/hooks/component-hooks/useNewTaskForm.tsx
+++ b/src/hooks/component-hooks/useNewTaskForm.tsx
@@ -8,6 +8,7 @@ import { DEFAULT_NONE_SELECT_VALUE } from "@/lib/constants";
import useCreateBacklogTask from "../backend-api-hooks/internet-dependant/useCreateBacklogTask";
import useEditTask from "../backend-api-hooks/internet-dependant/useEditTask";
import useEditDraftTask from "../backend-api-hooks/internet-dependant/useEditDraftTask";
+import { dbg } from "@/lib/logging";
export default function useNewTaskForm(project: Project) {
const [open, setOpen] = React.useState(false);
@@ -57,7 +58,7 @@ export default function useNewTaskForm(project: Project) {
};
payload.assignee_login =
payload.assignee_login === DEFAULT_NONE_SELECT_VALUE ? undefined : payload.assignee_login;
- console.log(data, payload);
+ dbg(data, payload);
const drafting = isDraftFinal || payload?.assignee_login === DEFAULT_NONE_SELECT_VALUE;
diff --git a/src/hooks/component-hooks/useTeamSelector.ts b/src/hooks/component-hooks/useTeamSelector.ts
index f901344..7c3ba14 100644
--- a/src/hooks/component-hooks/useTeamSelector.ts
+++ b/src/hooks/component-hooks/useTeamSelector.ts
@@ -1,5 +1,5 @@
import { useEffect, useState } from "react";
-import { alertError, logInfo } from "@/lib/utils";
+import { alertError, logInfo } from "@/lib/logging";
import { PossiblyPendingAuthor } from "@/types/interfaces";
import { TEAM_LOGINS_SEPERATOR } from "@/lib/constants";
import useSearchUsers from "../backend-api-hooks/internet-dependant/useSearchUsers";
diff --git a/src/hooks/route-hooks/useHome.ts b/src/hooks/route-hooks/useHome.ts
index c77417b..d96a642 100644
--- a/src/hooks/route-hooks/useHome.ts
+++ b/src/hooks/route-hooks/useHome.ts
@@ -1,5 +1,6 @@
import { useEffect } from "react";
-import { alertError, checkAuth } from "@/lib/utils";
+import { checkAuth } from "@/lib/utils";
+import { alertError } from "@/lib/logging";
import { useNavigate, useSearchParams } from "react-router";
import useGetUser from "../backend-api-hooks/internet-independant/useGetUser";
diff --git a/src/hooks/route-hooks/useSignin.ts b/src/hooks/route-hooks/useSignin.ts
index 6924ba7..5bf56cf 100644
--- a/src/hooks/route-hooks/useSignin.ts
+++ b/src/hooks/route-hooks/useSignin.ts
@@ -1,5 +1,6 @@
import { useEffect, useState } from "react";
-import { checkAuth, logError, logInfo } from "@/lib/utils";
+import { logError, logInfo } from "@/lib/logging";
+import { checkAuth } from "@/lib/utils";
import { useNavigate } from "react-router";
export default function useSignin() {
diff --git a/src/hooks/useAppPreferences.ts b/src/hooks/useAppPreferences.ts
index 4df957e..4d57089 100644
--- a/src/hooks/useAppPreferences.ts
+++ b/src/hooks/useAppPreferences.ts
@@ -1,5 +1,5 @@
import { STORE_PATH } from "@/lib/constants";
-import { alertError, alertSuccess, dbg } from "@/lib/utils";
+import { alertError, alertSuccess, dbg } from "@/lib/logging";
import { useClient } from "@/providers/ReactQueryProvider";
import { AppPreferences } from "@/types/interfaces";
import { useMutation, useQuery } from "@tanstack/react-query";
diff --git a/src/hooks/useAppVersion.ts b/src/hooks/useAppVersion.ts
index b7e6553..ef81f82 100644
--- a/src/hooks/useAppVersion.ts
+++ b/src/hooks/useAppVersion.ts
@@ -1,4 +1,4 @@
-import { logError } from "@/lib/utils";
+import { logError } from "@/lib/logging";
import { useEffect, useState } from "react";
import { getVersion } from "@tauri-apps/api/app";
diff --git a/src/hooks/useIsOnline.ts b/src/hooks/useIsOnline.ts
index b630fd6..e98fca6 100644
--- a/src/hooks/useIsOnline.ts
+++ b/src/hooks/useIsOnline.ts
@@ -1,4 +1,4 @@
-import { alertError, alertSuccess } from "@/lib/utils";
+import { alertError, alertSuccess } from "@/lib/logging";
import React from "react";
export default function useIsOnline() {
diff --git a/src/hooks/useListenForAuthSetupCompleteEvent.ts b/src/hooks/useListenForAuthSetupCompleteEvent.ts
index d209cd3..eea5c5d 100644
--- a/src/hooks/useListenForAuthSetupCompleteEvent.ts
+++ b/src/hooks/useListenForAuthSetupCompleteEvent.ts
@@ -1,6 +1,7 @@
import { useEffect } from "react";
import { useNavigate } from "react-router";
-import { alertSuccess, checkAuth, logError, logInfo } from "@/lib/utils";
+import { alertSuccess, logError, logInfo } from "@/lib/logging";
+import { checkAuth } from "@/lib/utils";
import { once } from "@tauri-apps/api/event";
export default function useListenForAuthSetupCompleteEvent() {
diff --git a/src/hooks/useListenForSyncUpdateMessage.ts b/src/hooks/useListenForSyncUpdateMessage.ts
index 9967bc4..8c82398 100644
--- a/src/hooks/useListenForSyncUpdateMessage.ts
+++ b/src/hooks/useListenForSyncUpdateMessage.ts
@@ -1,11 +1,12 @@
-import { alertError, alertSuccess, dbg, stringifyAndRemoveQuotes } from "@/lib/utils";
+import { stringifyAndRemoveQuotes } from "@/lib/utils";
+import { alertError, alertSuccess, dbg } from "@/lib/logging";
import { ProjectSyncResult } from "@/types/interfaces";
import { useEffect } from "react";
import { listen } from "@tauri-apps/api/event";
export default function useListenForSyncUpdateMessage() {
useEffect(() => {
- let unlisten = () => console.log("project sync result listener - unlisten func was not set");
+ let unlisten = () => dbg("project sync result listener - unlisten func was not set");
dbg("[useListenForSyncUpdateMessage] registering project sync result listener");
listen
("project_sync_result", (e) => {
diff --git a/src/hooks/useProjectSettings.ts b/src/hooks/useProjectSettings.ts
index 366a6e6..dd65294 100644
--- a/src/hooks/useProjectSettings.ts
+++ b/src/hooks/useProjectSettings.ts
@@ -1,5 +1,5 @@
import { useParams } from "react-router";
-import { alertError, dbg } from "@/lib/utils";
+import { alertError, dbg } from "@/lib/logging";
import { ProjectPatchArgs, ProjectSettingsPatchPayload } from "@/types/interfaces";
import useDeleteProjectPermanently from "./backend-api-hooks/internet-independant/useDeleteProjectPermanently";
import useUpdateProjectSyncSettings from "./useUpdateProjectSyncSettings";
diff --git a/src/hooks/useSetup.ts b/src/hooks/useSetup.ts
deleted file mode 100644
index abed1da..0000000
--- a/src/hooks/useSetup.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-import { invoke } from "@tauri-apps/api/core";
-import { useEffect, useState } from "react";
-import useGetUser from "./backend-api-hooks/internet-independant/useGetUser";
-import useLocalProjectsList from "./backend-api-hooks/internet-independant/useLocalProjectsList";
-
-// ensures user and local projects are loaded, then hides splash screen
-export default function useSetup() {
- const [isFirstRun, setIsFirstRun] = useState(true);
- const { loading } = useGetUser();
- const { isLoading } = useLocalProjectsList();
-
- useEffect(() => {
- if (isFirstRun && !loading && !isLoading) {
- setTimeout(() => {
- invoke("hide_splash").then(() => setIsFirstRun(false));
- }, 2000);
- }
- }, [loading, isLoading, isFirstRun]);
-}
diff --git a/src/hooks/useUpdateProjectSyncSettings.ts b/src/hooks/useUpdateProjectSyncSettings.ts
index 56a4f00..6f41ceb 100644
--- a/src/hooks/useUpdateProjectSyncSettings.ts
+++ b/src/hooks/useUpdateProjectSyncSettings.ts
@@ -1,5 +1,5 @@
import { STORE_PATH } from "@/lib/constants";
-import { alertError, alertSuccess } from "@/lib/utils";
+import { alertError, alertSuccess } from "@/lib/logging";
import { useClient } from "@/providers/ReactQueryProvider";
import { Project, ProjectPatchArgs } from "@/types/interfaces";
import { useMutation } from "@tanstack/react-query";
diff --git a/src/lib/logging.ts b/src/lib/logging.ts
new file mode 100644
index 0000000..176abb8
--- /dev/null
+++ b/src/lib/logging.ts
@@ -0,0 +1,60 @@
+import { DEFAULT_TOAST_OPTIONS } from "@/lib/constants";
+import { toast } from "sonner";
+import { invoke } from "@tauri-apps/api/core";
+import { truncateStr } from "./utils";
+
+export function alertError(e: T, description?: string) {
+ let errorMsg = e instanceof Error && e.message ? e.message : String(e);
+ errorMsg = trimFunctionNameFromLog(errorMsg);
+ toast.error(truncateStr(errorMsg, 200), {
+ ...DEFAULT_TOAST_OPTIONS,
+ description: truncateStr(description || "", 400),
+ });
+ persistOrConsoleLog("ERROR", errorMsg, description);
+}
+
+export function alertInfo(info: T, description?: string) {
+ let infoMsg = String(info);
+ infoMsg = infoMsg.replace(/\[.*?\]/g, "").trim(); // remove []
+ toast(infoMsg, { ...DEFAULT_TOAST_OPTIONS, description });
+ persistOrConsoleLog("INFO", infoMsg, description);
+}
+
+export function alertSuccess(title: T, description?: string) {
+ let successMsg = String(title);
+ successMsg = successMsg.replace(/\[.*?\]/g, "").trim(); // remove []
+ toast.success(successMsg, { ...DEFAULT_TOAST_OPTIONS, description });
+ persistOrConsoleLog("SUCCESS", successMsg, description);
+}
+
+export function dbg(...args: unknown[]) {
+ persistOrConsoleLog("INFO", "debug", undefined, args);
+}
+
+export function logError(...args: unknown[]) {
+ persistOrConsoleLog("ERROR", "error", undefined, args);
+}
+
+export function logInfo(...args: unknown[]) {
+ persistOrConsoleLog("INFO", "info", undefined, args);
+}
+
+export function trimFunctionNameFromLog(log: string) {
+ log = log
+ .trim()
+ .replace(/\[.*?\]/g, "")
+ .trim(); // remove []
+ return log;
+}
+
+function persistOrConsoleLog(log_type: "INFO" | "ERROR" | "SUCCESS", title: string, body?: string, context?: unknown) {
+ const log = {
+ log_type,
+ title,
+ body,
+ context: JSON.stringify(context),
+ };
+
+ if (import.meta.env.PROD) invoke("persist_log", { log });
+ else console.log(log);
+}
diff --git a/src/lib/utils.ts b/src/lib/utils.ts
index 9905442..1543084 100644
--- a/src/lib/utils.ts
+++ b/src/lib/utils.ts
@@ -1,8 +1,7 @@
-import { DEFAULT_TOAST_OPTIONS, STORE_PATH } from "@/lib/constants";
+import { STORE_PATH } from "@/lib/constants";
import { load } from "@tauri-apps/plugin-store";
import { clsx, type ClassValue } from "clsx";
import { twMerge } from "tailwind-merge";
-import { toast } from "sonner";
export function cn(...inputs: ClassValue[]) {
return twMerge(clsx(inputs));
@@ -16,50 +15,6 @@ export function truncateStr(str: string, length: number) {
return str.length > length ? str.substring(0, length - 1) : str;
}
-export function trimFunctionNameFromLog(log: string) {
- log = log
- .trim()
- .replace(/\[.*?\]/g, "")
- .trim(); // remove []
- return log;
-}
-
-export function alertError(e: T, description?: string) {
- logError(e);
- let errorMsg = e instanceof Error && e.message ? e.message : String(e);
- errorMsg = trimFunctionNameFromLog(errorMsg);
- toast.error(truncateStr(errorMsg, 200), {
- ...DEFAULT_TOAST_OPTIONS,
- description: truncateStr(description || "", 400),
- });
-}
-
-export function alertInfo(info: T, description?: string) {
- logInfo(info);
- let infoMsg = String(info);
- infoMsg = infoMsg.replace(/\[.*?\]/g, "").trim(); // remove []
- toast(infoMsg, { ...DEFAULT_TOAST_OPTIONS, description });
-}
-
-export function alertSuccess(info: T, description?: string) {
- logInfo(info);
- let infoMsg = String(info);
- infoMsg = infoMsg.replace(/\[.*?\]/g, "").trim(); // remove []
- toast.success(infoMsg, { ...DEFAULT_TOAST_OPTIONS, description });
-}
-
-export function dbg(...args: unknown[]) {
- console.log(...args);
-}
-
-export function logError(...args: unknown[]) {
- console.error(...args);
-}
-
-export function logInfo(...args: unknown[]) {
- console.log(...args);
-}
-
export function wait(seconds: number) {
return new Promise((resolve) => setTimeout(resolve, seconds * 1000));
}
diff --git a/src/providers/ConnectionStatusProvider.tsx b/src/providers/ConnectionStatusProvider.tsx
index b74a6eb..bebc6da 100644
--- a/src/providers/ConnectionStatusProvider.tsx
+++ b/src/providers/ConnectionStatusProvider.tsx
@@ -1,5 +1,5 @@
import useIsOnline from "@/hooks/useIsOnline";
-import { alertError } from "@/lib/utils";
+import { alertError } from "@/lib/logging";
import React, { PropsWithChildren, useContext } from "react";
const connectivityContext = React.createContext(true);
diff --git a/src/providers/SyncedProjectsProvider.tsx b/src/providers/SyncedProjectsProvider.tsx
index 59a3fcb..51e8434 100644
--- a/src/providers/SyncedProjectsProvider.tsx
+++ b/src/providers/SyncedProjectsProvider.tsx
@@ -1,4 +1,4 @@
-import { dbg } from "@/lib/utils";
+import { dbg } from "@/lib/logging";
import React from "react";
const syncedProjectsContext = React.createContext<{