Sync deploy: backend, frontend, worker, docker, config
This commit is contained in:
@@ -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 },
|
||||
},
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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}
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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>;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user