feat: create email template for TTO reservation confirmation

feat: implement order notifications service with TTO reservation confirmation handling

feat: create migration for TTO booking email webhook trigger
This commit is contained in:
Danel Kungla
2025-09-30 16:05:43 +03:00
parent 4003284f3a
commit 72f6f2b716
56 changed files with 3692 additions and 294 deletions

View File

@@ -6,6 +6,7 @@ import { ColumnDef } from '@tanstack/react-table';
import { Ellipsis } from 'lucide-react';
import { useTranslation } from 'react-i18next';
import { formatCurrency } from '@kit/shared/utils';
import { Database } from '@kit/supabase/database';
import { Badge } from '@kit/ui/badge';
import { Button } from '@kit/ui/button';
@@ -20,7 +21,6 @@ import { If } from '@kit/ui/if';
import { Input } from '@kit/ui/input';
import { ProfileAvatar } from '@kit/ui/profile-avatar';
import { Trans } from '@kit/ui/trans';
import { formatCurrency } from '@kit/shared/utils';
import { RemoveMemberDialog } from './remove-member-dialog';
import { RoleBadge } from './role-badge';
@@ -135,7 +135,10 @@ function useGetColumns(
}[];
},
): ColumnDef<Members[0]>[] {
const { t, i18n: { language } } = useTranslation('teams');
const {
t,
i18n: { language },
} = useTranslation('teams');
return useMemo(
() => [
@@ -183,7 +186,7 @@ function useGetColumns(
header: t('distributedBenefitsAmount'),
cell: ({ row }) => {
const benefitAmount = params.membersBenefitsUsage.find(
(usage) => usage.personal_account_id === row.original.id
(usage) => usage.personal_account_id === row.original.id,
)?.benefit_amount;
if (typeof benefitAmount !== 'number') {
return '-';
@@ -203,7 +206,11 @@ function useGetColumns(
const isPrimaryOwner = primary_owner_user_id === user_id;
return (
<span className={'flex items-center space-x-1 flex-wrap space-y-1 sm:space-y-0 sm:flex-nowrap'}>
<span
className={
'flex flex-wrap items-center space-y-1 space-x-1 sm:flex-nowrap sm:space-y-0'
}
>
<RoleBadge role={role} />
<If condition={isPrimaryOwner}>

View File

@@ -5,6 +5,7 @@ import { redirect } from 'next/navigation';
import { z } from 'zod';
import { AccountBalanceService } from '@kit/accounts/services/account-balance.service';
import { enhanceAction } from '@kit/next/actions';
import { createNotificationsApi } from '@kit/notifications/api';
import { getLogger } from '@kit/shared/logger';
@@ -18,7 +19,6 @@ import { RenewInvitationSchema } from '../../schema/renew-invitation.schema';
import { UpdateInvitationSchema } from '../../schema/update-invitation.schema';
import { createAccountInvitationsService } from '../services/account-invitations.service';
import { createAccountPerSeatBillingService } from '../services/account-per-seat-billing.service';
import { AccountBalanceService } from '@kit/accounts/services/account-balance.service';
/**
* @name createInvitationsAction

View File

@@ -1,7 +1,7 @@
import { z } from 'zod';
import { getLogger } from '@kit/shared/logger';
import type { Account } from '@kit/accounts/types/accounts';
import { getLogger } from '@kit/shared/logger';
export function createAccountWebhooksService() {
return new AccountWebhooksService();