ember-notiflix

Ember addon for Notiflix notification library.

Usage no npm install needed!

<script type="module">
  import emberNotiflix from 'https://cdn.skypack.dev/ember-notiflix';
</script>

README

ember-notiflix

This addon provides all Notiflix functionalities (notify, report, loading and confirm) and Notiflix is a pure JavaScript notification library with no dependency.

This addon expose all functionalities as an Ember Service. If you want to reach all functions (in your controllers, components or routes) you should inject the service to your code like down below.

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

export default class MyComponent extends Component {
  @service
  notiflix;
}

Compatibility

  • Ember.js v3.24 or above
  • Ember CLI v3.24 or above
  • Node.js v12 or above

Installation

ember install ember-notiflix

Configuration

You can change all initial global configuration settings via config/environment.js file. Notice that seperate notify, report, loading, confirm and block sections.

Please check the Notiflix documentation for more initial configuration details.

ENV['ember-notiflix'] = {
  notify: {},
  report: {},
  loading: {
    customSvgUrl:
      'https://cdn.shopify.com/s/files/1/0496/1029/files/Freesample.svg?5153',
    svgSize: '80px',
  },
  confirm: {},
  block: {},
};

WARNING: All merge functions private now. Please use @options instead.

Usage

Notify

Base - ( You can change the type with one of these values: success[default], failure, warning, info )
{{!--
    Since Ember 3.4 we can create a component without a dash in name,
    all "-base" named components are deprecated now.
--}}
<Notify @type="success" @message="Success" @onClick={{fn this.showAlert "Message"}} @options={{hash svgSize=0}} />
this.notiflix.notify(type, message, callback, options);
Success
<NotifySuccess @message="Success" @onClick={{fn this.showAlert "Message"}} @options={{hash svgSize=0}} />
this.notiflix.notifySuccess(message, callback, options);
Failure
<NotifyFailure @message="Failure" @onClick={{fn this.showAlert "Message"}} @options={{hash svgSize=0}} />
this.notiflix.notifyFailure(message, callback, options);
Warning
<NotifyWarning @message="Warning" @onClick={{fn this.showAlert "Message"}} @options={{hash svgSize=0}} />
this.notiflix.notifyWarning(message, callback, options);
Info
<NotifyInfo @message="Info" @onClick={{fn this.showAlert "Message"}} @options={{hash svgSize=0}} />
this.notiflix.notifyInfo(message, callback, options);

Report

Base - ( You can change the type with one of these values: success[default], failure, warning, info )
{{!--
    Since Ember 3.4 we can create a component without a dash in name,
    all "-base" named components are deprecated now.
--}}
<Report @type="success" @title="Success" @message="Message" @btnText="OK" @onClick={{fn this.showAlert "Message"}} @options={{hash svgSize=0}} />
this.notiflix.report(type, title, message, btnText, callback, options);
Success
<ReportSuccess @title="Success" @message="Message" @btnText="OK" @onClick={{fn this.showAlert "Message"}} @options={{hash svgSize=0}} />
this.notiflix.reportSuccess(title, message, btnText, callback, options);
Failure
<ReportFailure @title="Failure" @message="Message" @btnText="OK" @onClick={{fn this.showAlert "Message"}} @options={{hash svgSize=0}} />
this.notiflix.reportFailure(title, message, btnText, callback, options);
Warning
<ReportWarning @title="Warning" @message="Message" @btnText="OK" @onClick={{fn this.showAlert "Message"}} @options={{hash svgSize=0}} />
this.notiflix.reportWarning(title, message, btnText, callback, options);
Info
<ReportInfo @title="Info" @message="Message" @btnText="OK" @onClick={{fn this.showAlert "Message"}} @options={{hash svgSize=0}} />
this.notiflix.reportInfo(title, message, btnText, callback, options);

Loading

Base - ( You can change the type with one of these values: standard[default], hourglass, circle, arrows, dots, pulse )
{{!--
    Since Ember 3.4 we can create a component without a dash in name,
    all "-base" named components are deprecated now.
--}}
<Loading @type="standard" @message="Loading..." @options={{hash svgSize=0}} />
this.notiflix.loading(type, message, options);
Standard
<LoadingStandard @message="Loading..." @options={{hash svgSize=0}} />
this.notiflix.loadingStandard(message, options);
Hourglass
<LoadingHourglass @message="Loading..." @options={{hash svgSize=0}} />
this.notiflix.loadingHourglass(message, options);
Circle
<LoadingCircle @message="Loading..." @options={{hash svgSize=0}} />
this.notiflix.loadingCircle(message, options);
Arrows
<LoadingArrows @message="Loading..." @options={{hash svgSize=0}} />
this.notiflix.loadingArrows(message, options);
Dots
<LoadingDots @message="Loading..." @options={{hash svgSize=0}} />
this.notiflix.loadingDots(message, options);
Pulse
<LoadingPulse @message="Loading..." @options={{hash svgSize=0}} />
this.notiflix.loadingPulse(message, options);
Custom
<LoadingCustom @message="Loading..." @options={{hash svgSize=0}} />
this.notiflix.loadingCustom(message, options);

You can change the message in the loading screen in any time.

this.notiflix.loadingChange('Loading... %20');

You can remove the loading screen immediately,

this.notiflix.loadingRemove();

or you can remove the loading screen after some delay.

this.notiflix.loadingRemove(600); // milliseconds

Confirm

Base
{{!--
    Since Ember 3.4 we can create a component without a dash in name,
    all "-base" named components are deprecated now.
--}}
<Confirm @title="Notiflix Confirm" @message="Do you agree with me?" @okBtnText="Yes" @cancelBtnText="No" @okClick={{fn this.showAlert "Message"}} @options={{hash svgSize=0}} />
this.notiflix.confirm(
  title,
  message,
  okBtnText,
  cancelBtnText,
  okClick,
  cancelClick,
  options
);
Ask
{{!--
    Since Ember 3.4 we can create a component without a dash in name,
    all "-base" named components are deprecated now.
--}}
<Ask @title="'Where is Padmé?" @question="Is she safe? Is she all right?" @answer="It seems, in your anger, you killed her." @okBtnText="Answer" @cancelBtnText="Cancel" @okClick={{fn this.showAlert "Message"}} @options={{hash svgSize=0}} />
this.notiflix.ask(
  title,
  question,
  answer,
  okBtnText,
  cancelBtnText,
  okClick,
  cancelClick,
  options
);

Block

Base - ( You can change the type with one of these values: standard[default], hourglass, circle, arrows, dots, pulse )
{{!--
    Since Ember 3.4 we can create a component without a dash in name,
    all "-base" named components are deprecated now.
--}}
<Block @type="standard" @elements="li.items" @message="Blocking..." @options={{hash svgSize=0}} />
this.notiflix.block(type, elements, message, options);
Standard
<BlockStandard @elements="li.items" @message="Blocking..." @options={{hash svgSize=0}} />
this.notiflix.blockStandard(elements, message, options);
Hourglass
<BlockHourglass @elements="li.items" @message="Blocking..." @options={{hash svgSize=0}} />
this.notiflix.blockHourglass(elements, message, options);
Circle
<BlockCircle @elements="li.items" @message="Blocking..." @options={{hash svgSize=0}} />
this.notiflix.blockCircle(elements, message, options);
Arrows
<BlockArrows @elements="li.items" @message="Blocking..." @options={{hash svgSize=0}} />
this.notiflix.blockArrows(elements, message, options);
Dots
<BlockDots @elements="li.items" @message="Blocking..." @options={{hash svgSize=0}} />
this.notiflix.blockDots(elements, message, options);
Pulse
<BlockPulse @elements="li.items" @message="Blocking..." @options={{hash svgSize=0}} />
this.notiflix.blockPulse(elements, message, options);

You can remove the block screen immediately,

this.notiflix.blockRemove(elements);

or you can remove the block screen after some delay.

this.notiflix.blockRemove(elements, 600); // milliseconds

Contributing

See the Contributing guide for details.

TODO

  • Custom Loading
  • Loading change
  • Loading remove
  • Initial settings
  • Merge functions
  • Confirm cancel callback (onClick changed to okClick)
  • Added brand new block components
  • Added @options for components and functions
  • Added merge functions deprecations message
  • Merge functions private now
  • Ask component added

License

This project is licensed under the MIT License.