Avise-me quando chegar

Como utilizar a funcionalidade na vitrine da loja

O recurso Avise-me quando chegar disponibiliza um formulário de cadastro de e-mails na página dos produtos que não possuem unidades disponíveis em estoque. Pelo formulário, os clientes se cadastram para receber e-mails transacionais da loja. Dessa forma, quando um cliente cadastrar seu e-mail em um produto indisponível, ele recebe um aviso assim que o item voltar a ter disponibilidade em estoque.

Nesse tutorial você confere como alterar o front-end da loja e modificar o formulário de cadastro de e-mails em páginas de produtos indisponíveis.

🚧

Para que a funcionalidade esteja completa e funcione corretamente, você precisa também configurar os e-mails transacionais.
Saiba mais sobre esse recurso em Funcionalidades: Avise-me quando chegar.

Formulário

Se você utiliza um template de loja, o formulário Avise-me quando chegar está localizado no arquivo _form_notify.liquid. Nesse arquivo liquid você altera os atributos do formulário.

<form action="/lista_de_espera" method="post" class="notify-when-arrives {{ classNotify }}" data-form-notify>
  <label for="email-notify-when-arrives">Avise-me quando chegar</label>
  <div class="form-wrapper">
    <input type="hidden" name="key" value="{{ current_shop.subdomain }}-avise-me">
    <input type="hidden" name="sku" value="{{ product.variants[0].sku }}">
    <input type="hidden" name="nome" value="{{ product.name }}">
    <input type="hidden" name="url" value="{{ product.url }}">
    <input type="hidden" name="referencia" value="{{ product.reference }}">
    <input class="email" type="email" name="email" id="email-notify-when-arrives" placeholder="seu email" required>
    <button aria-label="Enviar e-mail para receber o aviso" type="submit">Enviar</button>
    <div class="msg-retorno" data-msg-retorno="">
      <div data-msg=""></div>
      <div class="msg-success" data-msg-success="">
        <p>Obrigado! Enviado com sucesso.</p>
      </div>
      <div class="msg-error" data-msg-error="">
        <p>Problema ao enviar, tente novamente.</p>
      </div>
    </div>
  </div>   
</form>

A chamada do formulário na vitrine é feita no arquivo JavaScript notify.js.

export const notify = {
  submit: function (_$form) {
    var formData = _$form.serialize();
  
    if (!_$form.hasClass('sending')) {
      $.ajax({
        url: _$form.attr('action'),
        type: 'post',
        dataType: 'json',
        data: formData,
        beforeSend: function () {
          _$form.addClass('sending');
        },
      })
      .done(function (resp) {
        console.log('success');
        console.info(resp);

        var msgSuccess =
          'Você receberá um e-mail quando o produto estiver disponível';

        if (resp.error) {
          _$form.find('[data-msg-retorno] [data-msg-error]').html(resp.error);
          _$form
            .find('[data-msg-retorno] [data-msg-success]')
            .removeClass('visible');
          _$form
            .find('[data-msg-retorno] [data-msg-error]')
            .addClass('visible');
        } else {
          // Envia um email para o cliente saber que o usuário solicitou o avise-me
          $.ajax({
            url: '/webform',
            type: 'POST',
            data: {
              key: _$form.find('[name="key"]').val(),
              reply_to: _$form.find('[name="email"]').val(),
              email: _$form.find('[name="email"]').val(),
              product_name: _$form.find('[name="nome"]').val(),
              referencia: _$form.find('[name="referencia"]').val(),
              sku: _$form.find('[name="sku"]').val(),
            },
          })
            .done(function (resp) {
              _$form
                .find('[data-msg-retorno] [data-msg-success]')
                .addClass('visible');
              _$form
                .find('[data-msg-retorno] [data-msg-error]')
                .removeClass('visible');

              _$form[0].reset();
            })
            .fail(function (error) {
              _$form
                .find('[data-msg-retorno] [data-msg-success]')
                .removeClass('visible');
              _$form
                .find('[data-msg-retorno] [data-msg-error]')
                .addClass('visible');
            });
        }
      })
      .fail(function (resp) {
        console.log('error');
        console.error(resp);
        console.error(resp.responseText);
        console.error(resp.responseText.error);

        var errorText = JSON.parse(resp.responseText);
        console.info(errorText);

        _$form
          .find('[data-msg-retorno] [data-msg-error]')
          .html(errorText.error);
        _$form
          .find('[data-msg-retorno] [data-msg-success]')
          .removeClass('visible');
        _$form
          .find('[data-msg-retorno] [data-msg-error]')
          .addClass('visible');
      })
      .always(function () {
        _$form.removeClass('sending');
      });
    }
  },
  init: function() {
    $(document).on('submit', '[data-form-notify]', function (event) {
      event.preventDefault();
      notify.submit($(this));
    });
  }
};

Caso você esteja criando ou utilizando uma loja com template customizado, você precisa incluir esses arquivos acima (notify.js e \_form_notify.liquid) no seu layout.