diff --git a/console/src/oapi/management.generated.ts b/console/src/oapi/management.generated.ts index 4e93e696..8828f0aa 100644 --- a/console/src/oapi/management.generated.ts +++ b/console/src/oapi/management.generated.ts @@ -2219,6 +2219,8 @@ export interface components { provider_id?: string; /** Format: uuid */ subscription_id?: string; + /** @example false */ + transactional?: boolean; }; UpdateCampaign: { /** @example epic hopper */ @@ -2228,6 +2230,10 @@ export interface components { * @example 5143f27c-cca9-4dc4-9059-e1dbb08144ad */ provider_id?: string; + /** Format: uuid */ + subscription_id?: string; + /** @example false */ + transactional?: boolean; variables?: components["schemas"]["CampaignVariable"][]; }; CampaignVariable: { @@ -2303,6 +2309,8 @@ export interface components { channel: components["schemas"]["Channel"]; /** Format: uuid */ subscription_id?: string; + /** @example false */ + transactional: boolean; provider?: components["schemas"]["Provider"]; templates: components["schemas"]["Template"][]; variables?: components["schemas"]["CampaignVariable"][]; diff --git a/console/src/types.ts b/console/src/types.ts index 148d415f..8df5a958 100644 --- a/console/src/types.ts +++ b/console/src/types.ts @@ -580,6 +580,7 @@ export interface Campaign { provider?: OAPIProvider subscription_id?: UUID subscription?: Subscription + transactional?: boolean templates: Template[] variables: CampaignVariable[] created_at: string @@ -589,9 +590,12 @@ export interface Campaign { export type CampaignSendState = "pending" | "sent" | "throttled" | "failed" | "bounced" | "aborted" export type CampaignUpdateParams = Partial< - Pick + Pick +> +export type CampaignCreateParams = Pick< + Campaign, + "name" | "channel" | "subscription_id" | "transactional" > -export type CampaignCreateParams = Pick export type CampaignUser = User & { state: CampaignSendState; send_at: string } interface NamedEmail { diff --git a/console/src/views/campaign/CampaignDetails.tsx b/console/src/views/campaign/CampaignDetails.tsx index 4039bbfc..16d904d5 100644 --- a/console/src/views/campaign/CampaignDetails.tsx +++ b/console/src/views/campaign/CampaignDetails.tsx @@ -1,11 +1,12 @@ -import { useContext, useState, useEffect } from "react" +import { useCallback, useContext, useMemo, useState, useEffect } from "react" import { CampaignContext, ProjectContext, TemplateContext } from "@/contexts" -import type { Campaign, Template, User } from "@/types" +import type { Campaign, Template, Subscription } from "@/types" import { useTranslation } from "react-i18next" import { Controller, useForm } from "react-hook-form" import { z } from "zod" import { zodResolver } from "@hookform/resolvers/zod" -import api from "@/api" +import oapiClient from "@/oapi/client" +import { useResolver } from "@/hooks" import { channels } from "./template/channels" import { CampaignVariables } from "./CampaignVariables" @@ -16,6 +17,15 @@ import { Field, FieldDescription, FieldError, FieldGroup, FieldLabel } from "@/c import { Input } from "@/components/ui/input" import { Button } from "@/components/ui/button" import { ProviderSelect } from "@/components/provider/select" +import { Switch } from "@/components/ui/switch" +import { Label } from "@/components/ui/label" +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from "@/components/ui/select" const campaignVariableSchema = z.object({ name: z.string(), @@ -36,6 +46,28 @@ function CampaignReview({ campaign, template }: { campaign: Campaign; template: const [, setCampaign] = useContext(CampaignContext) const templateState = useState