hunk.code_window:     control,
     });
     const { integrations = [] } = useIntegrations();
     const [integration, setIntegration]: any = useState(null);
     const [content, setContent] = useState<string>('<html><head></head><body><div></div></body></html>');
     const { isLoading, mutateAsync } = useMutation(previewEmail);
     const processedVariables = useProcessVariables(variables);
     const [payloadValue, setPayloadValue] = useState('{}');
  
hunk.labels: keep keep keep keep add keep keep keep keep keep
hunk.after_edit:   const [parsedSubject, setParsedSubject] = useState(subject);
  
hunk.file_path: apps/web/src/pages/templates/editor/Preview.tsx
hunk.type: add
file: import { IEmailOptions, IEmailProvider } from '@novu/stateless';
  import { ChannelTypeEnum } from '@novu/shared';
  import { IMailHandler } from '../interfaces/send.handler.interface';
  
  export abstract class BaseHandler implements IMailHandler {
    protected provider: IEmailProvider;
  
    protected constructor(
      private providerId: string,
      private channelType: string
    ) {}
  
    canHandle(providerId: string, channelType: ChannelTypeEnum) {
      return providerId === this.providerId && channelType === this.channelType;
    }
  
    abstract buildProvider(credentials, options);
  
    async send(mailData: IEmailOptions) {
      if (process.env.NODE_ENV === 'test') {
        return null;
      }
  
      return await this.provider.sendMessage(mailData);
    }
  
    public getProvider(): IEmailProvider {
      return this.provider;
    }
  }
  