payload-plugin-newsletter
Version:
Complete newsletter management plugin for Payload CMS with subscriber management, magic link authentication, and email service integration
171 lines (164 loc) • 5.28 kB
TypeScript
import React$1 from 'react';
interface Subscriber {
id: string;
email: string;
name?: string;
locale?: string;
subscriptionStatus: 'active' | 'unsubscribed' | 'pending';
emailPreferences?: {
newsletter?: boolean;
announcements?: boolean;
[key: string]: boolean | undefined;
};
source?: string;
importedFromProvider?: boolean;
utmParameters?: {
source?: string;
medium?: string;
campaign?: string;
content?: string;
term?: string;
};
signupMetadata?: {
ipAddress?: string;
userAgent?: string;
referrer?: string;
signupPage?: string;
};
leadMagnet?: string;
unsubscribedAt?: string;
magicLinkToken?: string;
magicLinkTokenExpiry?: string;
createdAt: string;
updatedAt: string;
}
interface SignupFormProps {
onSuccess?: (subscriber: Subscriber) => void;
onError?: (error: Error) => void;
showName?: boolean;
showPreferences?: boolean;
leadMagnet?: {
id: string;
title: string;
description?: string;
};
className?: string;
styles?: {
form?: React.CSSProperties;
inputGroup?: React.CSSProperties;
label?: React.CSSProperties;
input?: React.CSSProperties;
button?: React.CSSProperties;
buttonDisabled?: React.CSSProperties;
error?: React.CSSProperties;
success?: React.CSSProperties;
checkbox?: React.CSSProperties;
checkboxInput?: React.CSSProperties;
checkboxLabel?: React.CSSProperties;
};
apiEndpoint?: string;
buttonText?: string;
loadingText?: string;
successMessage?: string;
placeholders?: {
email?: string;
name?: string;
};
labels?: {
email?: string;
name?: string;
newsletter?: string;
announcements?: string;
};
}
interface PreferencesFormProps {
subscriber?: Subscriber;
onSuccess?: (subscriber: Subscriber) => void;
onError?: (error: Error) => void;
className?: string;
styles?: {
container?: React.CSSProperties;
heading?: React.CSSProperties;
form?: React.CSSProperties;
section?: React.CSSProperties;
sectionTitle?: React.CSSProperties;
inputGroup?: React.CSSProperties;
label?: React.CSSProperties;
input?: React.CSSProperties;
select?: React.CSSProperties;
checkbox?: React.CSSProperties;
checkboxInput?: React.CSSProperties;
checkboxLabel?: React.CSSProperties;
buttonGroup?: React.CSSProperties;
button?: React.CSSProperties;
primaryButton?: React.CSSProperties;
secondaryButton?: React.CSSProperties;
dangerButton?: React.CSSProperties;
error?: React.CSSProperties;
success?: React.CSSProperties;
info?: React.CSSProperties;
};
sessionToken?: string;
apiEndpoint?: string;
showUnsubscribe?: boolean;
locales?: string[];
labels?: {
title?: string;
personalInfo?: string;
emailPreferences?: string;
name?: string;
language?: string;
newsletter?: string;
announcements?: string;
saveButton?: string;
unsubscribeButton?: string;
saving?: string;
saved?: string;
unsubscribeConfirm?: string;
};
}
declare const NewsletterForm: React$1.FC<SignupFormProps>;
declare function createNewsletterForm(defaultProps: Partial<SignupFormProps>): React$1.FC<SignupFormProps>;
declare const PreferencesForm: React$1.FC<PreferencesFormProps>;
declare function createPreferencesForm(defaultProps: Partial<PreferencesFormProps>): React$1.FC<PreferencesFormProps>;
interface MagicLinkVerifyProps {
token?: string;
onSuccess?: (sessionToken: string, subscriber: any) => void;
onError?: (error: Error) => void;
apiEndpoint?: string;
className?: string;
styles?: {
container?: React$1.CSSProperties;
heading?: React$1.CSSProperties;
message?: React$1.CSSProperties;
error?: React$1.CSSProperties;
button?: React$1.CSSProperties;
};
labels?: {
verifying?: string;
success?: string;
error?: string;
expired?: string;
invalid?: string;
redirecting?: string;
tryAgain?: string;
};
}
declare const MagicLinkVerify: React$1.FC<MagicLinkVerifyProps>;
declare function createMagicLinkVerify(defaultProps: Partial<MagicLinkVerifyProps>): React$1.FC<MagicLinkVerifyProps>;
interface UseNewsletterAuthOptions {
}
interface UseNewsletterAuthReturn {
subscriber: Subscriber | null;
isAuthenticated: boolean;
isLoading: boolean;
loading: boolean;
error: Error | null;
signOut: () => Promise<void>;
logout: () => Promise<void>;
refreshAuth: () => Promise<void>;
refreshSubscriber: () => Promise<void>;
login: (token: string) => Promise<void>;
}
declare function useNewsletterAuth(_options?: UseNewsletterAuthOptions): UseNewsletterAuthReturn;
export { MagicLinkVerify, type MagicLinkVerifyProps, NewsletterForm, PreferencesForm, createMagicLinkVerify, createNewsletterForm, createPreferencesForm, useNewsletterAuth };