npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ember-sweetalert

v3.1.0

Published

Ember Sweet Alerts with SweetAlert2

Downloads

319

Readme

Ember Sweet Alert

An ember-cli addon for using SweetAlert2 in Ember applications.

Compatibility

  • Ember.js v3.16 or above
  • Ember CLI v2.13 or above
  • Node.js v10 or above

Installation

ember install ember-sweetalert

IE11 requires the Babel polyfill to be present, otherwise you'll get a Promise is undefined error. As per this comment you can add it via your ember-cli-build.js file as follows:

// ember-cli-build.js
let app = new EmberApp(defaults, {
  'ember-cli-babel': {
    includePolyfill: true
  }
});

Usage

In your templates

Basic Usage

The sweet-alert component allows setting SweetAlert's attributes.

<SweetAlert @title="Hello World" />

By default the alert will be open as soon as the template is rendered. See below for controlling whether the alert is open.

Configuration

All Sweet Alert options Sweet Alert configuration options can also be passed in as arguments:

<SweetAlert
  @title="Hello World"
  @text="Welcome to our website."
  @icon="success"
  @footer="Nothing else to say."
  @allowOutsideClick={{false}}
/>

If there are defaults that you want to set for every alert, you can set these in your environment config, e.g.:

ENV['ember-sweetalert'] = {
  target: '#my-sweetalert',
  allowOutsideClick: false
};

Opening

By default the alert will be open when the component is rendered. To control this behaviour, use the show attribute. For example to open the alert when a button is clicked:

{{! sayHello === false to start }}
<SweetAlert
  @show={{this.sayHello}}
  @title="Hello World"
  @text="Welcome to our website."
  @icon="success"
/>

<button {{action (mut sayHello) true}}>Click Me</button>

The Sweet Alert component follows the Data-Down, Action Up (DDAU) pattern. This means in the example above, the alert will only show once, as sayHello will remain true once the alert is closed. To allow an alert to be open/closed any number of times, use an action to set the show variable back to false once the alert is closed. For example:

{{! sayHello === false to start }}
<SweetAlert
  @show={{this.sayHello}}
  @title="Hello World"
  @text="Welcome to our website."
  @icon="success"
  @willClose={{action (mut this.sayHello) false}}
/>

<button {{action (mut this.sayHello) true}}>Click Me</button>

Actions

The component supports all the Sweet Alert actions allowed via configuration:

  • willOpen
  • didOpen
  • didRender
  • willClose
  • didClose
  • didDestroy

In addition, the component also supports the following two actions:

  • onConfirm: invoked if the user clicks the confirm button within the alert.
  • onCancel: invoked if the user closes the alert without confirmation.

Both actions receive the return value from Sweet Alert.

The following example collects an email from a user, giving them a different message based on whether they provided the email or cancelled:

import Component from '@glimmer/component';
import { tracked } from '@glimmer/tracking';
import { action } from '@ember/object';

export default class JoinMailingListComponent extends Component {
  @tracked enterEmail = false;
  @tracked email;
  @tracked sayThankYou = false;
  @tracked didNotJoin = false;

  @action
  collectEmail() {
    this.enterEmail = true;
  }

  @action
  join({ value }) {
    this.email = value;
    this.enterEmail = false;
    this.sayThankYou = true;
  }

  @action
  didCancel() {
    this.enterEmail = false;
    this.didNotJoin = true;
  }

  @action
  reset() {
    this.enterEmail = false;
    this.email = null;
    this.sayThankYou = false;
    this.didNotJoin = false;
  }
}
<button {{on "click" this.collectEmail}}>Join Mailing List</button>

<SweetAlert
  @show={{this.enterEmail}}
  @title="Submit email to join our mailing list"
  @input="email"
  @showCancelButton={{true}}
  @confirmButtonText="Join"
  @onConfirm={{this.join}}
  @onCancel={{this.didCancel}}
/>

<SweetAlert
  @show={{this.sayThankYou}}
  @title="Thank You!"
  @text="You are now on our mailing list."
  @icon="success"
  @willClose={{this.reset}}
/>

<SweetAlert
  @show={{this.didNotJoin}}
  @title=":-("
  @text="Ok, we won't add you to our mailing list."
  @willClose={{this.reset}}
/>

In your code

Service

The recommended way to use SweetAlert in your code is to inject the swal service and use the fire method. The service ensures your default SweetAlert config is used, plus integrates with the Ember run loop.

Here is an example:

import Component from '@ember/component';
import { inject as service } from '@ember/service';
import { action } from '@ember/object';

export default class DeleteModelComponent extends Component {
  @service swal;

  @action
  async confirm() {
    let { value } = await this.swal.fire({
      title: 'Are you sure?',
      showCancelButton: true
    });

    if (value) {
      this.args.model.destroyRecord();
    }
  }
}

The service also exposes the SweetAlert methods, scheduling any action methods on the Ember run loop.

Import it

If you really need to you can import SweetAlert easily with:

import Swal from 'sweetalert2';

Using SweetAlert directly as an import will not have your default settings and will not be run-loop aware.

In your tests

Setup

You will need to set the target for Sweet Alert to the Ember testing div. Add the following to your environment config:

if (environment === 'test') {
  ENV.APP.rootElement = '#ember-testing';
  // ...
  ENV['ember-sweetalert'] = { target: ENV.APP.rootElement };
}

Test Helpers

This addon provides a number of test helpers that can be used in acceptance or rendering tests.

Test helpers can be imported from ember-sweetalert/test-support. The available helpers are:

| Helper | Description | | :--- | :--- | | open(target) | Clicks the specified target and waits for Sweet Alert to open. | | confirm | Clicks the Sweet Alert confirm button. | | confirmAndClose | Clicks the Sweet Alert confirm button and waits for it to close. | | cancel | Clicks the Sweet Alert cancel button. | | cancelAndClose | Clicks the Sweet Alert cancel button and waits for it to close. | | waitForOpen | Wait for Sweet Alert to open. | | waitForClose | Wait for Sweet Alert to close. |

An example acceptance test:

import { module, test } from 'qunit';
import { visit, fillIn } from '@ember/test-helpers';
import { setupApplicationTest } from 'ember-qunit';
import { open, confirmAndClose } from 'ember-sweetalert/test-support';

module('Acceptance | join mailing list', function(hooks) {
  setupApplicationTest(hooks);

  test('user can join mailing list', async function(assert) {
    await visit('/');
    await open('button.join');
    await fillIn('input[type="email"]', '[email protected]');
    await confirmAndClose();

    assert.dom('.email').hasText('Your email is: [email protected]');
  });
});

Contributing

See the Contributing guide for details.

License

This project is licensed under the MIT License.