docbrown/app/javascript/admin/controllers/snackbar_controller.js
Mac Siri afa73e06e3
Replace Webpacker with Esbuild (#20470)
* Migrate to esbuild WIP

* Add exclude

* Remove redundant file

* Move file

* Move to javascript_include_tag

* Lint fix

* WIP

* WIP

* Add watch mode to esbuild WIP

* Get jest working

* Remove babel

* Revert "Remove babel"

This reverts commit 6da35260aa19d6f97f586deb66c0ecaf48433b73.

* More WIP

* Got image to load

* WIP

* Resolve audit

* Lint fix

* WIP

* Fix jest spec

* [CI] Remove asset-restore for test build stage

* Production compliant

* Temp disable sourcemap

* Update glob

* Add esbuild helper to stimulus

* Import fragment

* Temp disable coverage to see failing tests

* Fix broken spec

* Address lint

* Set proper es6 target

* Use esbuild for everything

* wait what

* Revert "Set proper es6 target"

This reverts commit 98f5278093421baa8ffe2ca580845b01c1a1eadf.

* Revert "Use esbuild for everything"

This reverts commit 0ac46738f07ffcb6af095ccb1ffa5e439b7fefa3.

* Replace uglifier with terser

* New compiled assets version

* Remvoe honeybadger-io/webpack

* Remove cypress coverage checks for now

* Update jsconfig.json

* Update docker-compose

* Remove public/packs-test from ci cache
2024-01-25 20:29:21 +00:00

31 lines
1,006 B
JavaScript

import { Controller } from '@hotwired/stimulus';
// Wraps the Preact Snackbar component into a Stimulus controller
export default class SnackbarController extends Controller {
static targets = ['snackZone'];
async connect() {
const [{ h, render }, { Snackbar }] = await Promise.all([
import('preact'),
// eslint-disable-next-line import/no-unresolved
import('../../Snackbar'),
]);
render(<Snackbar lifespan="3" />, this.snackZoneTarget);
}
async disconnect() {
const { render } = await import('preact');
render(null, this.snackZoneTarget);
}
// Any Stimulus controller can add an item to the Snackbar by dispatching a custom event
// data-action="snackbar:add@document->snackbar#addItem"
async addItem(event) {
const { message, addCloseButton = false } = event.detail;
// eslint-disable-next-line import/no-unresolved
const { addSnackbarItem } = await import('../../Snackbar');
addSnackbarItem({ message, addCloseButton });
}
}