rnr-starter
Version:
A comprehensive React Native Expo boilerplate with 50+ modern UI components, dark/light themes, i18n, state management, and production-ready architecture
63 lines (52 loc) • 1.93 kB
text/typescript
import type { ComponentType } from 'react';
export type ToastType = 'success' | 'error' | 'info' | 'warning' | 'loading';
export type ToastPosition = 'top' | 'bottom' | 'center';
export interface ToastAction {
label: string;
onClick: () => void;
}
export interface ToastConfig {
duration?: number;
position?: ToastPosition;
icon?: string | ComponentType;
action?: ToastAction;
dismissible?: boolean;
haptic?: boolean; // Only for native platforms
}
export interface ToastMessage {
id: string;
type: ToastType;
message: string;
isI18nKey?: boolean;
config?: ToastConfig;
timestamp: number;
}
export interface ToastStore {
messages: ToastMessage[];
isEnabled: boolean;
defaultConfig: ToastConfig;
// Actions
show: (type: ToastType, message: string, config?: ToastConfig) => string;
showI18n: (type: ToastType, i18nKey: string, config?: ToastConfig) => string;
dismiss: (id: string) => void;
dismissAll: () => void;
setEnabled: (enabled: boolean) => void;
setDefaultConfig: (config: Partial<ToastConfig>) => void;
// Convenience methods
success: (message: string, config?: ToastConfig) => string;
error: (message: string, config?: ToastConfig) => string;
info: (message: string, config?: ToastConfig) => string;
warning: (message: string, config?: ToastConfig) => string;
loading: (message: string, config?: ToastConfig) => string;
// I18n convenience methods
successI18n: (i18nKey: string, config?: ToastConfig) => string;
errorI18n: (i18nKey: string, config?: ToastConfig) => string;
infoI18n: (i18nKey: string, config?: ToastConfig) => string;
warningI18n: (i18nKey: string, config?: ToastConfig) => string;
loadingI18n: (i18nKey: string, config?: ToastConfig) => string;
}
export interface ToastService {
show: (type: ToastType, message: string, config?: ToastConfig) => string;
dismiss: (id: string) => void;
dismissAll: () => void;
}