diff --git a/app/api/job/handler/sync-analysis-groups.ts b/app/api/job/handler/sync-analysis-groups.ts
index c037378..515e91b 100644
--- a/app/api/job/handler/sync-analysis-groups.ts
+++ b/app/api/job/handler/sync-analysis-groups.ts
@@ -41,7 +41,7 @@ export default async function syncAnalysisGroups() {
try {
console.info('Getting latest public message id');
- const lastCheckedDate = await getLastCheckedDate();
+ // const lastCheckedDate = await getLastCheckedDate(); never used?
const latestMessage = await getLatestPublicMessageListItem();
if (!latestMessage) {
diff --git a/app/api/job/handler/sync-connected-online.ts b/app/api/job/handler/sync-connected-online.ts
index 80e89c9..2255479 100644
--- a/app/api/job/handler/sync-connected-online.ts
+++ b/app/api/job/handler/sync-connected-online.ts
@@ -81,21 +81,19 @@ export default async function syncConnectedOnline() {
});
}
- let clinics;
- let services;
- let serviceProviders;
- let jobTitleTranslations;
// Filter out "Dentas Demo OÜ" in prod or only sync "Dentas Demo OÜ" in any other environment
const isDemoClinic = (clinicId: number) =>
isProd ? clinicId !== 2 : clinicId === 2;
- clinics = responseData.Data.T_Lic.filter(({ ID }) => isDemoClinic(ID));
- services = responseData.Data.T_Service.filter(({ ClinicID }) =>
+ const clinics = responseData.Data.T_Lic.filter(({ ID }) =>
+ isDemoClinic(ID),
+ );
+ const services = responseData.Data.T_Service.filter(({ ClinicID }) =>
isDemoClinic(ClinicID),
);
- serviceProviders = responseData.Data.T_Doctor.filter(({ ClinicID }) =>
+ const serviceProviders = responseData.Data.T_Doctor.filter(({ ClinicID }) =>
isDemoClinic(ClinicID),
);
- jobTitleTranslations = createTranslationMap(
+ const jobTitleTranslations = createTranslationMap(
responseData.Data.P_JobTitleTranslations.filter(({ ClinicID }) =>
isDemoClinic(ClinicID),
),
diff --git a/app/api/job/medipost-retry-dispatch/route.ts b/app/api/job/medipost-retry-dispatch/route.ts
index 06a2db6..a191998 100644
--- a/app/api/job/medipost-retry-dispatch/route.ts
+++ b/app/api/job/medipost-retry-dispatch/route.ts
@@ -21,7 +21,7 @@ export const POST = async (request: NextRequest) => {
try {
validateApiKey(request);
- } catch (e) {
+ } catch {
return NextResponse.json({}, { status: 401, statusText: 'Unauthorized' });
}
diff --git a/app/api/job/send-open-jobs-emails/route.ts b/app/api/job/send-open-jobs-emails/route.ts
index 9bf4118..0c22957 100644
--- a/app/api/job/send-open-jobs-emails/route.ts
+++ b/app/api/job/send-open-jobs-emails/route.ts
@@ -14,7 +14,7 @@ export const POST = async (request: NextRequest) => {
try {
validateApiKey(request);
- } catch (e) {
+ } catch {
return NextResponse.json({}, { status: 401, statusText: 'Unauthorized' });
}
diff --git a/app/api/job/sync-analysis-groups-store/route.ts b/app/api/job/sync-analysis-groups-store/route.ts
index be54509..1def4a9 100644
--- a/app/api/job/sync-analysis-groups-store/route.ts
+++ b/app/api/job/sync-analysis-groups-store/route.ts
@@ -9,7 +9,7 @@ export const POST = async (request: NextRequest) => {
try {
validateApiKey(request);
- } catch (e) {
+ } catch {
return NextResponse.json({}, { status: 401, statusText: 'Unauthorized' });
}
diff --git a/app/api/job/sync-analysis-groups/route.ts b/app/api/job/sync-analysis-groups/route.ts
index 83cc6d3..cb06e1c 100644
--- a/app/api/job/sync-analysis-groups/route.ts
+++ b/app/api/job/sync-analysis-groups/route.ts
@@ -9,7 +9,7 @@ export const POST = async (request: NextRequest) => {
try {
validateApiKey(request);
- } catch (e) {
+ } catch {
return NextResponse.json({}, { status: 401, statusText: 'Unauthorized' });
}
diff --git a/app/api/job/sync-analysis-results/route.ts b/app/api/job/sync-analysis-results/route.ts
index 392be6a..0f66fbc 100644
--- a/app/api/job/sync-analysis-results/route.ts
+++ b/app/api/job/sync-analysis-results/route.ts
@@ -9,7 +9,7 @@ export const POST = async (request: NextRequest) => {
try {
validateApiKey(request);
- } catch (e) {
+ } catch {
return NextResponse.json({}, { status: 401, statusText: 'Unauthorized' });
}
diff --git a/app/api/job/sync-connected-online/route.ts b/app/api/job/sync-connected-online/route.ts
index 065c8ec..41fb295 100644
--- a/app/api/job/sync-connected-online/route.ts
+++ b/app/api/job/sync-connected-online/route.ts
@@ -9,7 +9,7 @@ export const POST = async (request: NextRequest) => {
try {
validateApiKey(request);
- } catch (e) {
+ } catch {
return NextResponse.json({}, { status: 401, statusText: 'Unauthorized' });
}
diff --git a/app/api/job/test-medipost-responses/route.ts b/app/api/job/test-medipost-responses/route.ts
index fc1f2e1..0634efd 100644
--- a/app/api/job/test-medipost-responses/route.ts
+++ b/app/api/job/test-medipost-responses/route.ts
@@ -18,7 +18,7 @@ export async function POST(request: NextRequest) {
try {
validateApiKey(request);
- } catch (e) {
+ } catch {
return NextResponse.json({}, { status: 401, statusText: 'Unauthorized' });
}
diff --git a/app/auth/membership-confirmation/layout.tsx b/app/auth/membership-confirmation/layout.tsx
index e3d32c7..1360b0f 100644
--- a/app/auth/membership-confirmation/layout.tsx
+++ b/app/auth/membership-confirmation/layout.tsx
@@ -1,5 +1,3 @@
-import { withI18n } from '~/lib/i18n/with-i18n';
-
async function SiteLayout(props: React.PropsWithChildren) {
return (
diff --git a/app/auth/update-account/_lib/server/update-account.ts b/app/auth/update-account/_lib/server/update-account.ts
index 622787d..2b8b62e 100644
--- a/app/auth/update-account/_lib/server/update-account.ts
+++ b/app/auth/update-account/_lib/server/update-account.ts
@@ -4,7 +4,6 @@ import { updateCustomer } from '@lib/data/customer';
import { AccountSubmitData, createAuthApi } from '@kit/auth/api';
import { enhanceAction } from '@kit/next/actions';
-import { pathsConfig } from '@kit/shared/config';
import { getSupabaseServerClient } from '@kit/supabase/server-client';
import { UpdateAccountSchemaServer } from '../schemas/update-account.schema';
diff --git a/app/doctor/_components/analysis-feedback.tsx b/app/doctor/_components/analysis-feedback.tsx
new file mode 100644
index 0000000..c1d4c54
--- /dev/null
+++ b/app/doctor/_components/analysis-feedback.tsx
@@ -0,0 +1,156 @@
+import React, { useState } from 'react';
+
+import { giveFeedbackAction } from '@/packages/features/doctor/src/lib/server/actions/doctor-server-actions';
+import {
+ DoctorFeedback,
+ Order,
+ Patient,
+} from '@/packages/features/doctor/src/lib/server/schema/doctor-analysis-detail-view.schema';
+import {
+ DoctorAnalysisFeedbackForm,
+ doctorAnalysisFeedbackFormSchema,
+} from '@/packages/features/doctor/src/lib/server/schema/doctor-analysis.schema';
+import ConfirmationModal from '@/packages/shared/src/components/confirmation-modal';
+import { useUser } from '@/packages/supabase/src/hooks/use-user';
+import { zodResolver } from '@hookform/resolvers/zod';
+import { useQueryClient } from '@tanstack/react-query';
+import { useForm } from 'react-hook-form';
+
+import { Trans } from '@kit/ui/makerkit/trans';
+import { Button } from '@kit/ui/shadcn/button';
+import {
+ Form,
+ FormControl,
+ FormField,
+ FormItem,
+ FormMessage,
+} from '@kit/ui/shadcn/form';
+import { toast } from '@kit/ui/shadcn/sonner';
+import { Textarea } from '@kit/ui/shadcn/textarea';
+
+const AnalysisFeedback = ({
+ feedback,
+ patient,
+ order,
+}: {
+ feedback?: DoctorFeedback;
+ patient: Patient;
+ order: Order;
+}) => {
+ const [isDraftSubmitting, setIsDraftSubmitting] = useState(false);
+ const [isConfirmOpen, setIsConfirmOpen] = useState(false);
+ const { data: user } = useUser();
+ const queryClient = useQueryClient();
+
+ const form = useForm({
+ resolver: zodResolver(doctorAnalysisFeedbackFormSchema),
+ reValidateMode: 'onChange',
+ defaultValues: {
+ feedbackValue: feedback?.value ?? '',
+ userId: patient.userId,
+ },
+ });
+
+ const isReadOnly =
+ !!feedback?.doctor_user_id && feedback?.doctor_user_id !== user?.id;
+
+ const handleDraftSubmit = async (e: React.FormEvent) => {
+ setIsDraftSubmitting(true);
+ e.preventDefault();
+
+ form.formState.errors.feedbackValue = undefined;
+ const formData = form.getValues();
+ await onSubmit(formData, 'DRAFT');
+ setIsDraftSubmitting(false);
+ };
+ const handleCompleteSubmit = form.handleSubmit(async () => {
+ setIsConfirmOpen(true);
+ });
+
+ const onSubmit = async (
+ data: DoctorAnalysisFeedbackForm,
+ status: 'DRAFT' | 'COMPLETED',
+ ) => {
+ const result = await giveFeedbackAction({
+ ...data,
+ analysisOrderId: order.analysisOrderId,
+ status,
+ });
+
+ if (!result.success) {
+ return toast.error(
);
+ }
+
+ queryClient.invalidateQueries({
+ predicate: (query) => query.queryKey.includes('doctor-jobs'),
+ });
+
+ toast.success(
);
+
+ return setIsConfirmOpen(false);
+ };
+
+ const confirmComplete = form.handleSubmit(async (data) => {
+ await onSubmit(data, 'COMPLETED');
+ });
+
+ return (
+ <>
+
+
+
+
{feedback?.value ?? '-'}
+ {!isReadOnly && (
+
+
+ )}
+
setIsConfirmOpen(false)}
+ onConfirm={confirmComplete}
+ titleKey="doctor:confirmFeedbackModal.title"
+ descriptionKey="doctor:confirmFeedbackModal.description"
+ />
+ >
+ );
+};
+
+export default AnalysisFeedback;
diff --git a/app/doctor/_components/analysis-view.tsx b/app/doctor/_components/analysis-view.tsx
index 6996d11..e1fc8e4 100644
--- a/app/doctor/_components/analysis-view.tsx
+++ b/app/doctor/_components/analysis-view.tsx
@@ -1,13 +1,8 @@
'use client';
-import { useState } from 'react';
-
-import { zodResolver } from '@hookform/resolvers/zod';
import { useQueryClient } from '@tanstack/react-query';
import { capitalize } from 'lodash';
-import { useForm } from 'react-hook-form';
-import { giveFeedbackAction } from '@kit/doctor/actions/doctor-server-actions';
import {
getDOBWithAgeStringFromPersonalCode,
getResultSetName,
@@ -18,28 +13,14 @@ import {
Order,
Patient,
} from '@kit/doctor/schema/doctor-analysis-detail-view.schema';
-import {
- DoctorAnalysisFeedbackForm,
- doctorAnalysisFeedbackFormSchema,
-} from '@kit/doctor/schema/doctor-analysis.schema';
-import ConfirmationModal from '@kit/shared/components/confirmation-modal';
import { useCurrentLocaleLanguageNames } from '@kit/shared/hooks';
import { getFullName } from '@kit/shared/utils';
import { useUser } from '@kit/supabase/hooks/use-user';
-import { Button } from '@kit/ui/button';
-import {
- Form,
- FormControl,
- FormField,
- FormItem,
- FormMessage,
-} from '@kit/ui/form';
-import { toast } from '@kit/ui/sonner';
-import { Textarea } from '@kit/ui/textarea';
import { Trans } from '@kit/ui/trans';
import { bmiFromMetric } from '~/lib/utils';
+import AnalysisFeedback from './analysis-feedback';
import DoctorAnalysisWrapper from './doctor-analysis-wrapper';
import DoctorJobSelect from './doctor-job-select';
@@ -54,10 +35,8 @@ export default function AnalysisView({
analyses: AnalysisResponse[];
feedback?: DoctorFeedback;
}) {
- const [isConfirmOpen, setIsConfirmOpen] = useState(false);
- const [isDraftSubmitting, setIsDraftSubmitting] = useState(false);
-
const { data: user } = useUser();
+ const queryClient = useQueryClient();
const languageNames = useCurrentLocaleLanguageNames();
@@ -68,65 +47,11 @@ export default function AnalysisView({
);
const isCurrentDoctorJob =
!!feedback?.doctor_user_id && feedback?.doctor_user_id === user?.id;
- const isReadOnly =
- !!feedback?.doctor_user_id && feedback?.doctor_user_id !== user?.id;
-
- const form = useForm({
- resolver: zodResolver(doctorAnalysisFeedbackFormSchema),
- reValidateMode: 'onChange',
- defaultValues: {
- feedbackValue: feedback?.value ?? '',
- userId: patient.userId,
- },
- });
-
- const queryClient = useQueryClient();
if (!patient || !order || !analyses) {
return null;
}
- const onSubmit = async (
- data: DoctorAnalysisFeedbackForm,
- status: 'DRAFT' | 'COMPLETED',
- ) => {
- const result = await giveFeedbackAction({
- ...data,
- analysisOrderId: order.analysisOrderId,
- status,
- });
-
- if (!result.success) {
- return toast.error();
- }
-
- queryClient.invalidateQueries({
- predicate: (query) => query.queryKey.includes('doctor-jobs'),
- });
-
- toast.success();
-
- return setIsConfirmOpen(false);
- };
-
- const handleDraftSubmit = async (e: React.FormEvent) => {
- setIsDraftSubmitting(true);
- e.preventDefault();
-
- form.formState.errors.feedbackValue = undefined;
- const formData = form.getValues();
- await onSubmit(formData, 'DRAFT');
- setIsDraftSubmitting(false);
- };
-
- const handleCompleteSubmit = form.handleSubmit(async () => {
- setIsConfirmOpen(true);
- });
-
- const confirmComplete = form.handleSubmit(async (data) => {
- await onSubmit(data, 'COMPLETED');
- });
-
return (
<>
@@ -228,59 +153,9 @@ export default function AnalysisView({
);
})}
-
-
-
- {feedback?.value ?? '-'}
- {!isReadOnly && (
-
-
+ {order.isPackage && (
+
)}
- setIsConfirmOpen(false)}
- onConfirm={confirmComplete}
- titleKey="doctor:confirmFeedbackModal.title"
- descriptionKey="doctor:confirmFeedbackModal.description"
- />
>
);
}
diff --git a/app/home/(user)/(dashboard)/analysis-results/[id]/page.tsx b/app/home/(user)/(dashboard)/analysis-results/[id]/page.tsx
index b18a4da..4962016 100644
--- a/app/home/(user)/(dashboard)/analysis-results/[id]/page.tsx
+++ b/app/home/(user)/(dashboard)/analysis-results/[id]/page.tsx
@@ -108,7 +108,7 @@ export default async function AnalysisResultsPage({
)}
{orderedAnalysisElements ? (
- orderedAnalysisElements.map((element, index) => (
+ orderedAnalysisElements.map((element) => (
{element.results?.nestedElements?.map(
diff --git a/app/home/(user)/(dashboard)/cart/montonio-callback/error/page.tsx b/app/home/(user)/(dashboard)/cart/montonio-callback/error/page.tsx
index c84908a..dbc57d1 100644
--- a/app/home/(user)/(dashboard)/cart/montonio-callback/error/page.tsx
+++ b/app/home/(user)/(dashboard)/cart/montonio-callback/error/page.tsx
@@ -1,5 +1,3 @@
-import { use } from 'react';
-
import Link from 'next/link';
import { createI18nServerInstance } from '@/lib/i18n/i18n.server';
diff --git a/app/home/(user)/(dashboard)/order-analysis-package/page.tsx b/app/home/(user)/(dashboard)/order-analysis-package/page.tsx
index ecf1903..c08e973 100644
--- a/app/home/(user)/(dashboard)/order-analysis-package/page.tsx
+++ b/app/home/(user)/(dashboard)/order-analysis-package/page.tsx
@@ -28,17 +28,18 @@ async function OrderAnalysisPackagePage() {
-
+
-
+
}
+ countryCode={countryCode}
/>
void;
+ disabled: boolean;
+ isLoading: boolean;
+}) => {
+ return (
+
+
+
+ );
+};
+
+const ComparePackagesAddToCartButtons = ({
+ countryCode,
+ standardPackage,
+ standardPlusPackage,
+ premiumPackage,
+}: {
+ countryCode: string;
+ standardPackage: AnalysisPackageWithVariant;
+ standardPlusPackage: AnalysisPackageWithVariant;
+ premiumPackage: AnalysisPackageWithVariant;
+}) => {
+ const [addedPackage, setAddedPackage] = useState(null);
+ const router = useRouter();
+
+ const handleSelect = async ({ variantId }: AnalysisPackageWithVariant) => {
+ setAddedPackage(variantId);
+ try {
+ await handleAddToCart({
+ selectedVariant: { id: variantId },
+ countryCode,
+ });
+ setAddedPackage(null);
+ toast.success(
+ ,
+ );
+ router.push(pathsConfig.app.cart);
+ } catch (e) {
+ toast.error(
+ ,
+ );
+ setAddedPackage(null);
+ console.error(e);
+ }
+ };
+
+ return (
+
+
+
+
+ handleSelect(standardPackage)}
+ disabled={!!addedPackage}
+ isLoading={addedPackage === standardPackage.variantId}
+ />
+ handleSelect(standardPlusPackage)}
+ disabled={!!addedPackage}
+ isLoading={addedPackage === standardPlusPackage.variantId}
+ />
+ handleSelect(premiumPackage)}
+ disabled={!!addedPackage}
+ isLoading={addedPackage === premiumPackage.variantId}
+ />
+
+
+
+ );
+};
+
+export default ComparePackagesAddToCartButtons;
diff --git a/app/home/(user)/_components/compare-packages-modal.tsx b/app/home/(user)/_components/compare-packages-modal.tsx
index 06797b4..73c5ba6 100644
--- a/app/home/(user)/_components/compare-packages-modal.tsx
+++ b/app/home/(user)/_components/compare-packages-modal.tsx
@@ -26,6 +26,9 @@ import {
import { createI18nServerInstance } from '~/lib/i18n/i18n.server';
import { withI18n } from '~/lib/i18n/with-i18n';
+import ComparePackagesAddToCartButtons from './compare-packages-add-to-cart-buttons';
+import DefaultPackageFeaturesRows from './default-package-features-rows';
+
export type AnalysisPackageElement = Pick<
StoreProduct,
'title' | 'id' | 'description'
@@ -35,7 +38,7 @@ export type AnalysisPackageElement = Pick<
isIncludedInPremium: boolean;
};
-const CheckWithBackground = () => {
+export const CheckWithBackground = () => {
return (
@@ -53,7 +56,7 @@ const PackageTableHead = async ({
const { title, price, nrOfAnalyses } = product;
return (
-
+
{
const { t } = await createI18nServerInstance();
@@ -110,7 +115,7 @@ const ComparePackagesModal = async ({
{t('product:healthPackageComparison.description')}
-
+
@@ -121,6 +126,8 @@ const ComparePackagesModal = async ({
+
+
{analysisPackageElements.map(
({
title,
@@ -136,7 +143,7 @@ const ComparePackagesModal = async ({
return (
-
+
{title}{' '}
{description && (
+
diff --git a/app/home/(user)/_components/default-package-features-rows.tsx b/app/home/(user)/_components/default-package-features-rows.tsx
new file mode 100644
index 0000000..a070a2b
--- /dev/null
+++ b/app/home/(user)/_components/default-package-features-rows.tsx
@@ -0,0 +1,46 @@
+import React from 'react';
+
+import { Trans } from '@kit/ui/makerkit/trans';
+import { TableCell, TableRow } from '@kit/ui/shadcn/table';
+
+import { withI18n } from '~/lib/i18n/with-i18n';
+
+import { CheckWithBackground } from './compare-packages-modal';
+
+const DefaultPackageFeaturesRows = () => {
+ return (
+ <>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ >
+ );
+};
+
+export default withI18n(DefaultPackageFeaturesRows);
diff --git a/app/home/(user)/_components/home-menu-navigation.tsx b/app/home/(user)/_components/home-menu-navigation.tsx
index d7751a3..fce240b 100644
--- a/app/home/(user)/_components/home-menu-navigation.tsx
+++ b/app/home/(user)/_components/home-menu-navigation.tsx
@@ -26,13 +26,6 @@ export async function HomeMenuNavigation(props: {
const balanceSummary = workspace?.id
? await getAccountBalanceSummary(workspace.id)
: null;
- const totalValue = props.cart?.total
- ? formatCurrency({
- currencyCode: props.cart.currency_code,
- locale: language,
- value: props.cart.total,
- })
- : 0;
const cartQuantityTotal =
props.cart?.items?.reduce((acc, item) => acc + item.quantity, 0) ?? 0;
diff --git a/app/home/(user)/_components/home-mobile-navigation.tsx b/app/home/(user)/_components/home-mobile-navigation.tsx
index 892ebd7..f7bd054 100644
--- a/app/home/(user)/_components/home-mobile-navigation.tsx
+++ b/app/home/(user)/_components/home-mobile-navigation.tsx
@@ -25,16 +25,21 @@ import {
DropdownMenuTrigger,
} from '@kit/ui/dropdown-menu';
import { If } from '@kit/ui/if';
+import { cn } from '@kit/ui/shadcn';
+import { Avatar, AvatarFallback, AvatarImage } from '@kit/ui/shadcn/avatar';
+import { Button } from '@kit/ui/shadcn/button';
import { Trans } from '@kit/ui/trans';
// home imports
import type { UserWorkspace } from '../_lib/server/load-user-workspace';
+const PERSONAL_ACCOUNT_SLUG = 'personal';
+
export function HomeMobileNavigation(props: {
workspace: UserWorkspace;
cart: StoreCart | null;
}) {
- const user = props.workspace.user;
+ const { user, accounts } = props.workspace;
const signOut = useSignOut();
const { data: personalAccountData } = usePersonalAccountData(user.id);
@@ -85,10 +90,28 @@ export function HomeMobileNavigation(props: {
return (
-
-
-
-
+
+
+
+
+
+
+
+
@@ -148,6 +171,46 @@ export function HomeMobileNavigation(props: {
+ 0}>
+
+
+
+
+ {accounts.map((account) => (
+
+
+
+
+
+
+
+ {account.label ? account.label[0] : ''}
+
+
+
+
{account.label}
+
+
+
+ ))}
+
+
+
signOut.mutateAsync()} />
diff --git a/app/home/(user)/_components/order-cards.tsx b/app/home/(user)/_components/order-cards.tsx
index 0c936ce..4ad6cca 100644
--- a/app/home/(user)/_components/order-cards.tsx
+++ b/app/home/(user)/_components/order-cards.tsx
@@ -5,7 +5,7 @@ import Link from 'next/link';
import { cn } from '@/lib/utils';
import { pathsConfig } from '@/packages/shared/src/config';
import { ComponentInstanceIcon } from '@radix-ui/react-icons';
-import { ChevronRight, HeartPulse } from 'lucide-react';
+import { ChevronRight } from 'lucide-react';
import { Button } from '@kit/ui/button';
import {
diff --git a/app/home/(user)/_components/recommendations-skeleton.tsx b/app/home/(user)/_components/recommendations-skeleton.tsx
index eaa9917..fad1225 100644
--- a/app/home/(user)/_components/recommendations-skeleton.tsx
+++ b/app/home/(user)/_components/recommendations-skeleton.tsx
@@ -1,7 +1,6 @@
import React from 'react';
import { InfoTooltip } from '@/packages/shared/src/components/ui/info-tooltip';
-import { HeartPulse } from 'lucide-react';
import { Button } from '@kit/ui/shadcn/button';
import {
diff --git a/app/home/(user)/_lib/server/actions.ts b/app/home/(user)/_lib/server/actions.ts
index aae04d5..4cacb05 100644
--- a/app/home/(user)/_lib/server/actions.ts
+++ b/app/home/(user)/_lib/server/actions.ts
@@ -48,7 +48,7 @@ export async function createInitialReservationAction(
export async function cancelTtoBooking(bookingCode: string, clinicId: number) {
try {
- const response = await fetch(
+ await fetch(
`${process.env.CONNECTED_ONLINE_URL}/${ConnectedOnlineMethodName.ConfirmedCancel}`,
{
headers: {
diff --git a/app/home/(user)/_lib/server/is-valid-open-ai-env.ts b/app/home/(user)/_lib/server/is-valid-open-ai-env.ts
index 6384a1e..550d8b0 100644
--- a/app/home/(user)/_lib/server/is-valid-open-ai-env.ts
+++ b/app/home/(user)/_lib/server/is-valid-open-ai-env.ts
@@ -5,7 +5,7 @@ export const isValidOpenAiEnv = async () => {
const client = new OpenAI();
await client.models.list();
return true;
- } catch (e) {
+ } catch {
return false;
}
};
diff --git a/app/home/[account]/_components/team-account-navigation-menu.tsx b/app/home/[account]/_components/team-account-navigation-menu.tsx
index d0be16d..3df3be8 100644
--- a/app/home/[account]/_components/team-account-navigation-menu.tsx
+++ b/app/home/[account]/_components/team-account-navigation-menu.tsx
@@ -1,9 +1,6 @@
import { useMemo } from 'react';
-import {
- getTeamAccountSidebarConfig,
- pathsConfig,
-} from '@/packages/shared/src/config';
+import { pathsConfig } from '@/packages/shared/src/config';
import { AppLogo } from '@kit/shared/components/app-logo';
import { ProfileAccountDropdownContainer } from '@kit/shared/components/personal-account-dropdown-container';
@@ -28,25 +25,6 @@ export function TeamAccountNavigationMenu(props: {
[rawAccounts],
);
- const routes = getTeamAccountSidebarConfig(account.slug).routes.reduce<
- Array<{
- path: string;
- label: string;
- Icon?: React.ReactNode;
- end?: boolean | ((path: string) => boolean);
- }>
- >((acc, item) => {
- if ('children' in item) {
- return [...acc, ...item.children];
- }
-
- if ('divider' in item) {
- return acc;
- }
-
- return [...acc, item];
- }, []);
-
return (
diff --git a/app/home/[account]/_components/team-account-statistics.tsx b/app/home/[account]/_components/team-account-statistics.tsx
index d921b5a..800473c 100644
--- a/app/home/[account]/_components/team-account-statistics.tsx
+++ b/app/home/[account]/_components/team-account-statistics.tsx
@@ -1,6 +1,6 @@
'use client';
-import { useState } from 'react';
+import { useMemo, useState } from 'react';
import { redirect } from 'next/navigation';
@@ -43,11 +43,13 @@ export default function TeamAccountStatistics({
accountBenefitStatistics,
expensesOverview,
}: TeamAccountStatisticsProps) {
- const currentDate = new Date();
- const [date, setDate] = useState
({
- from: new Date(currentDate.getFullYear(), currentDate.getMonth(), 1),
- to: new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 0),
- });
+ const date = useMemo(() => {
+ const currentDate = new Date();
+ return {
+ from: new Date(currentDate.getFullYear(), currentDate.getMonth(), 1),
+ to: new Date(currentDate.getFullYear(), currentDate.getMonth() + 1, 0),
+ };
+ }, []);
const {
i18n: { language },
} = useTranslation();
diff --git a/lib/services/medipost/medipostPrivateMessage.service.ts b/lib/services/medipost/medipostPrivateMessage.service.ts
index 12afeee..7a1b99c 100644
--- a/lib/services/medipost/medipostPrivateMessage.service.ts
+++ b/lib/services/medipost/medipostPrivateMessage.service.ts
@@ -397,7 +397,7 @@ export async function readPrivateMessageResponse({
try {
analysisOrder = await getAnalysisOrder({ analysisOrderId });
medusaOrderId = analysisOrder.medusa_order_id;
- } catch (e) {
+ } catch {
if (IS_ENABLED_DELETE_PRIVATE_MESSAGE) {
await deletePrivateMessage(privateMessageId);
}
@@ -571,7 +571,6 @@ export async function sendOrderToMedipost({
phone: account.phone ?? '',
},
orderId: medreportOrder.id,
- orderCreatedAt: new Date(medreportOrder.created_at),
comment: '',
});
diff --git a/lib/services/medipost/medipostXML.service.ts b/lib/services/medipost/medipostXML.service.ts
index b3541bc..974c644 100644
--- a/lib/services/medipost/medipostXML.service.ts
+++ b/lib/services/medipost/medipostXML.service.ts
@@ -33,7 +33,6 @@ export async function composeOrderXML({
analysisElements,
person,
orderId,
- orderCreatedAt,
comment,
}: {
analyses: AnalysesWithGroupsAndElements;
@@ -45,7 +44,6 @@ export async function composeOrderXML({
phone: string;
};
orderId: number;
- orderCreatedAt: Date;
comment?: string;
}) {
const analysisGroups: Tables<{ schema: 'medreport' }, 'analysis_groups'>[] =
diff --git a/lib/services/medusaCart.service.ts b/lib/services/medusaCart.service.ts
index 2700ee1..a19e695 100644
--- a/lib/services/medusaCart.service.ts
+++ b/lib/services/medusaCart.service.ts
@@ -2,6 +2,7 @@
import { loadCurrentUserAccount } from '@/app/home/(user)/_lib/server/load-user-account';
import { MontonioOrderHandlerService } from '@/packages/billing/montonio/src';
+import { getLogger } from '@/packages/shared/src/logger';
import { addToCart, deleteLineItem, retrieveCart } from '@lib/data/cart';
import { getCartId } from '@lib/data/cookies';
import { StoreCartLineItem, StoreProductVariant } from '@medusajs/types';
@@ -44,12 +45,17 @@ export async function handleAddToCart({
selectedVariant: Pick;
countryCode: string;
}) {
- try {
- } catch (e) {
- console.error('medusa card error: ', e);
- }
+ const logger = await getLogger();
+ const ctx = {
+ countryCode,
+ selectedVariant,
+ };
+
+ logger.info(ctx, 'Adding to cart...');
+
const { account } = await loadCurrentUserAccount();
if (!account) {
+ logger.error(ctx, 'Account not found');
throw new Error('Account not found');
}
diff --git a/packages/email-templates/src/emails/book-time-failed.email.tsx b/packages/email-templates/src/emails/book-time-failed.email.tsx
index 7c4cb93..3fd9e48 100644
--- a/packages/email-templates/src/emails/book-time-failed.email.tsx
+++ b/packages/email-templates/src/emails/book-time-failed.email.tsx
@@ -43,7 +43,7 @@ export async function renderBookTimeFailedEmail({
- Broneeringu {reservationId} Connected Online'i saatmine ei
+ Broneeringu {reservationId} Connected Online'i saatmine ei
õnnestunud, kliendile tuleb teha tagasimakse.
Saadud error: {error}
diff --git a/packages/email-templates/src/emails/new-jobs-available.email.tsx b/packages/email-templates/src/emails/new-jobs-available.email.tsx
index 34fb7d9..7819ecd 100644
--- a/packages/email-templates/src/emails/new-jobs-available.email.tsx
+++ b/packages/email-templates/src/emails/new-jobs-available.email.tsx
@@ -69,7 +69,7 @@ export async function renderNewJobsAvailableEmail({
{analysisResponseIds.map((analysisResponseId, index) => (
- -
+
-
- There was an error loading subscription.
-
-
- Please check the logs for more information or try again later.
-
-
- );
- }
-
- return (
-
-
Subscription
-
-
- This account does not currently have a subscription.
-
- }
- >
- {(subscription) => {
- return (
-
-
-
- Subscription ID
-
- Provider
-
- Customer ID
-
- Status
-
- Created At
-
- Period Starts At
-
- Ends At
-
-
-
-
-
- {subscription.id}
-
-
-
- {subscription.billing_provider}
-
-
-
- {subscription.billing_customer_id}
-
-
-
- {subscription.status}
-
-
-
- {subscription.created_at}
-
-
-
- {subscription.period_starts_at}
-
-
-
- {subscription.period_ends_at}
-
-
-
-
-
-
-
- Product ID
-
- Variant ID
-
- Quantity
-
- Price
-
- Interval
-
- Type
-
-
-
- {subscription.subscription_items.map((item) => {
- return (
-
-
- {item.product_id}
-
-
-
- {item.variant_id}
-
-
-
- {item.quantity}
-
-
-
- {item.price_amount}
-
-
-
- {item.interval}
-
-
-
- {item.type}
-
-
- );
- })}
-
-
-
- );
- }}
-
-
- );
-}
-
async function getMemberships(userId: string) {
const client = getSupabaseServerClient();
diff --git a/packages/features/auth/src/components/multi-factor-challenge-container.tsx b/packages/features/auth/src/components/multi-factor-challenge-container.tsx
index 5ff28d4..b5c9dee 100644
--- a/packages/features/auth/src/components/multi-factor-challenge-container.tsx
+++ b/packages/features/auth/src/components/multi-factor-challenge-container.tsx
@@ -50,7 +50,7 @@ export function MultiFactorChallengeContainer({
try {
await fetch('/api/after-mfa', { method: 'POST' });
router.replace(paths.redirectPath);
- } catch (err) {
+ } catch {
// ignore
}
},
diff --git a/packages/features/doctor/src/lib/server/schema/doctor-analysis-detail-view.schema.ts b/packages/features/doctor/src/lib/server/schema/doctor-analysis-detail-view.schema.ts
index b4c1f16..3195009 100644
--- a/packages/features/doctor/src/lib/server/schema/doctor-analysis-detail-view.schema.ts
+++ b/packages/features/doctor/src/lib/server/schema/doctor-analysis-detail-view.schema.ts
@@ -92,7 +92,7 @@ export const AnalysisResponseSchema = z.object({
export type AnalysisResponse = z.infer;
export const AnalysisResultDetailsSchema = z.object({
- analysisResponse: z.array(AnalysisResponseSchema).nullable(),
+ analysisResponse: z.array(AnalysisResponseSchema),
order: OrderSchema,
doctorFeedback: DoctorFeedbackSchema,
patient: PatientSchema,
diff --git a/packages/features/medusa-storefront/src/lib/data/cart.ts b/packages/features/medusa-storefront/src/lib/data/cart.ts
index ddb9350..a252159 100644
--- a/packages/features/medusa-storefront/src/lib/data/cart.ts
+++ b/packages/features/medusa-storefront/src/lib/data/cart.ts
@@ -7,6 +7,8 @@ import { sdk } from '@lib/config';
import medusaError from '@lib/util/medusa-error';
import { HttpTypes, StoreCart } from '@medusajs/types';
+import { getLogger } from '@kit/shared/logger';
+
import {
getAuthHeaders,
getCacheOptions,
@@ -135,13 +137,21 @@ export async function addToCart({
quantity: number;
countryCode: string;
}) {
+ const logger = await getLogger();
+ const ctx = {
+ variantId,
+ quantity,
+ countryCode,
+ };
if (!variantId) {
+ logger.error(ctx, 'Missing variant ID when adding to cart');
throw new Error('Missing variant ID when adding to cart');
}
const cart = await getOrSetCart(countryCode);
if (!cart) {
+ logger.error(ctx, 'Error retrieving or creating cart');
throw new Error('Error retrieving or creating cart');
}
diff --git a/packages/features/team-accounts/src/components/company-guard.tsx b/packages/features/team-accounts/src/components/company-guard.tsx
index 5708c66..314d095 100644
--- a/packages/features/team-accounts/src/components/company-guard.tsx
+++ b/packages/features/team-accounts/src/components/company-guard.tsx
@@ -16,7 +16,7 @@ export function CompanyGuard(
Component: LayoutOrPageComponent,
) {
return async function AdminGuardServerComponentWrapper(params: Params) {
- //@ts-ignore
+ // @ts-expect-error incorrectly typed params
const { account } = await params.params;
const client = getSupabaseServerClient();
const [isUserSuperAdmin, isUserCompanyAdmin] = await Promise.all([
diff --git a/packages/features/team-accounts/src/server/actions/team-invitations-server-actions.ts b/packages/features/team-accounts/src/server/actions/team-invitations-server-actions.ts
index 8212d9f..d08736b 100644
--- a/packages/features/team-accounts/src/server/actions/team-invitations-server-actions.ts
+++ b/packages/features/team-accounts/src/server/actions/team-invitations-server-actions.ts
@@ -149,7 +149,6 @@ export const updateInvitationAction = enhanceAction(
export const acceptInvitationAction = enhanceAction(
async (data: FormData, user) => {
const client = getSupabaseServerClient();
- const accountBalanceService = new AccountBalanceService();
const { inviteToken, nextPath } = AcceptInvitationSchema.parse(
Object.fromEntries(data),
diff --git a/packages/shared/src/components/package-header.tsx b/packages/shared/src/components/package-header.tsx
index 6a02286..16e5264 100644
--- a/packages/shared/src/components/package-header.tsx
+++ b/packages/shared/src/components/package-header.tsx
@@ -18,14 +18,16 @@ export const PackageHeader = ({
return (
{title}
-
+
{formatCurrency({
currencyCode: 'eur',
locale: language,
value: price,
})}
- {analysesNr}
+
+ {analysesNr}
+
);
};
diff --git a/packages/shared/src/components/personal-account-dropdown-container.tsx b/packages/shared/src/components/personal-account-dropdown-container.tsx
index 638ff96..f85c906 100644
--- a/packages/shared/src/components/personal-account-dropdown-container.tsx
+++ b/packages/shared/src/components/personal-account-dropdown-container.tsx
@@ -46,11 +46,10 @@ export function ProfileAccountDropdownContainer(props: {
return (
signOut.mutateAsync()}
showProfileName={props.showProfileName}
diff --git a/packages/shared/src/components/select-analysis-package.tsx b/packages/shared/src/components/select-analysis-package.tsx
index 83ce3ec..59d5170 100644
--- a/packages/shared/src/components/select-analysis-package.tsx
+++ b/packages/shared/src/components/select-analysis-package.tsx
@@ -117,6 +117,7 @@ export default function SelectAnalysisPackage({