# Cómo crear un widget de suscripción personalizado

## Crear un widget de suscripción

Si el widget predeterminado no coincide con sus objetivos y preferencias, puede crear su propio widget de suscripción personalizado siguiendo los pasos que se describen a continuación.

1. Agregue a su proyecto un `<div>` oculto que contenga la solicitud de suscripción.

```txt
<div class="push-notification-widget push-notification-widget_hidden" id="push-notification-widget">
  <div class="push-notification-widget__title">
    ¡No se pierda nada importante! Suscríbase a las notificaciones push.
  </div>
  <div class="push-notification-widget__control">
    <button class="push-notification-widget__button" type="button" onClick="Pushwoosh.subscribe()">
      Suscribirse
    </button>
  </div>
  <div class="push-notification-widget__success">
    Está suscrito
  </div>
</div>
```

2. Especifique sus estilos.

```txt
<style>
  .push-notification-widget_hidden {
    display: none;
  }

  .push-notification-widget__success {
    display: none;
  }

  .push-notification-widget_subscribed .push-notification-widget__title {
    display: none;
  }

  .push-notification-widget_subscribed .push-notification-widget__control {
    display: none;
  }

  .push-notification-widget_subscribed .push-notification-widget__success {
    display: block;
  }
</style>
```

3. Una vez que se inicialice el WebSDK de Pushwoosh, compruebe si un usuario ya está suscrito o ha bloqueado las solicitudes de permiso. Si no es así, muestre el widget.

<Aside type="caution">
Asegúrese de mostrar el widget DESPUÉS de que el WebSDK se haya inicializado por completo. De lo contrario, el widget no funcionará correctamente.
</Aside>

```txt
<script>
  var $subscriptionWidget = document.getElementById('push-notification-widget');
  var Pushwoosh = Pushwoosh || [];
  // muestra un mensaje de éxito si un dispositivo se suscribe a las notificaciones push
  Pushwoosh.push(['onSubscribe', () => {
    $subscriptionWidget.classList.add('push-notification-widget_subscribed');
  }]);
  Pushwoosh.push(() => {
    /* ahora el WebSDK está listo y puede usar métodos públicos. */
    // crea un array para Promise.all
    var actions = [];
    // comprueba el permiso del dispositivo para las notificaciones push
    var permission = Pushwoosh.driver.getPermission();
    // comprueba si un dispositivo está registrado en Pushwoosh y puede recibir notificaciones push
    var isSubscribed = Pushwoosh.isSubscribed();
    actions.push(permission);
    actions.push(isSubscribed);
    // espera a que se resuelvan todas las acciones
    Promise.all(actions)
      .then((result) => {
        var permission = result[0];
        var isSubscribed = result[1];
        // si las notificaciones push no están bloqueadas en un dispositivo (puede mostrar la solicitud de permiso nativa)
        // y si el dispositivo no está suscrito a las notificaciones push (incluida la cancelación manual de la suscripción)
        // muestra el widget de notificación
        if (permission !== 'denied' && !isSubscribed) {
          $subscriptionWidget.classList.remove('push-notification-widget_hidden');
        }
      });
  });
</script>
```