Sync deploy: backend, frontend, worker, docker, config

This commit is contained in:
Azouhri Abdelaziz
2026-02-04 17:37:28 +01:00
parent dfb9fa342a
commit 4ea770bdeb
6 changed files with 8 additions and 7 deletions

View File

@@ -2794,7 +2794,7 @@ export async function adminRoutes(fastify: FastifyInstance) {
userIds: { type: 'array', items: { type: 'string', format: 'uuid' } },
emails: { type: 'array', items: { type: 'string', format: 'email' } },
segment: { type: 'string', enum: SEGMENTS },
locale: { type: 'string', enum: ['en', 'fr'] },
locale: { type: 'string', enum: ['en', 'fr', 'ar'] },
limit: { type: 'integer', minimum: 1 },
payload: { type: 'object', additionalProperties: true },
},

View File

@@ -71,11 +71,11 @@ export default function CategoryPage() {
if (reducedMotion) return;
const interval = setInterval(() => {
setPlaceholderIndex((prev) => (prev + 1) % placeholderExamples.length);
setPlaceholderIndex((prev) => (prev + 1) % placeholderKeys.length);
}, 3000);
return () => clearInterval(interval);
}, [reducedMotion, placeholderExamples.length]);
}, [reducedMotion, placeholderKeys.length]);
const fetchTools = React.useCallback(async () => {
setIsLoading(true);

View File

@@ -227,7 +227,7 @@ export default function ToolsPage() {
const count = tierCounts[tier.id] || 0;
const isActive = activeTier === tier.id;
const Icon = tier.icon;
const label = "labelKey" in tier && tier.labelKey ? t(tier.labelKey) : tier.label;
const label = t(tier.labelKey);
return (
<motion.button
key={tier.id}

View File

@@ -101,7 +101,7 @@ export function EmailComposer({ onSendSuccess }: EmailComposerProps) {
try {
const body: AdminEmailSendSingleBody = {
emailType: singleType,
locale: singleLocale === "en" || singleLocale === "fr" || singleLocale === "ar" ? singleLocale : undefined,
locale: singleLocale === "en" || singleLocale === "fr" ? singleLocale : undefined,
};
if (/^[0-9a-f-]{36}$/i.test(recipient)) body.userId = recipient;
else body.email = recipient;

View File

@@ -16,6 +16,7 @@ import { useTranslations } from "next-intl";
export default function PdfMergeTool(props: Omit<BaseToolProps, 'uploadType'>) {
const t = useTranslations("toasts");
const tButtons = useTranslations("toolButtons");
const tTools = useTranslations("tools");
const [pdfFiles, setPdfFiles] = useState<(File | null)[]>([]);
const setSelectedFilesRef = useRef<((files: File[]) => void) | null>(null);
const setSelectedFileRef = useRef<((file: File | null) => void) | null>(null);

View File

@@ -569,8 +569,8 @@ export interface AdminEmailSendBatchBody {
emailType: string;
userIds?: string[];
emails?: string[];
segment?: "all" | "all_pro" | "all_free" | "locale_en" | "locale_fr" | "active_last_7d" | "active_last_30d" | "active_last_90d" | "signup_last_7d" | "signup_last_30d";
locale?: "en" | "fr";
segment?: "all" | "all_pro" | "all_free" | "locale_en" | "locale_fr" | "locale_ar" | "active_last_7d" | "active_last_30d" | "active_last_90d" | "signup_last_7d" | "signup_last_30d";
locale?: "en" | "fr" | "ar";
limit?: number;
payload?: Record<string, unknown>;
}