Skip to content
Dialog and Alerts

Dialog and Alerts

A modal dialog whose buttons show banner messages with alert.ShowBannerMessage and alert.ShowBannerError.

Dialog and Alerts

package main

import (
	"fmt"
	"math/rand"
	"strconv"

	"go.wdy.de/nago/application"
	"go.wdy.de/nago/presentation/core"
	"go.wdy.de/nago/presentation/ui"
	"go.wdy.de/nago/presentation/ui/alert"
	"go.wdy.de/nago/web/vuejs"
)

func main() {
	application.Configure(func(cfg *application.Configurator) {
		cfg.SetApplicationID("de.worldiety.tutorial_110")
		cfg.Serve(vuejs.Dist())

		cfg.SetDecorator(cfg.NewScaffold().
			Login(true).
			Decorator())

		cfg.RootView(".", cfg.DecorateRootView(func(wnd core.Window) core.View {
			isPresented := core.AutoState[bool](wnd)

			stateCount := core.StateOf[int](wnd, "stateCount")
			msgPart := "I am a notification banner alert thingy."

			msg := msgPart
			if rand.Intn(100) < 50 {
				msg = msg + " " + msgPart
			}
			if rand.Intn(100) < 50 {
				msg = msg + " " + msgPart
			}
			if rand.Intn(100) < 50 {
				msg = msg + " " + msgPart
			}

			showBanner := func(intent alert.Intent) {
				stateCount.Set(stateCount.Get() + 1)
				alert.ShowBannerMessage(wnd, alert.Message{
					Title:   "Beep boop " + strconv.Itoa(stateCount.Get()),
					Message: msg,
					Intent:  intent,
				})
			}

			showBannerTechnicalError := func() {
				stateCount.Set(stateCount.Get() + 1)
				alert.ShowBannerError(wnd, fmt.Errorf("beep boop err %d", stateCount.Get()))
			}

			return ui.VStack(
				ui.ThemeSwitcher(
					ui.PrimaryButton(nil).Title("Toggle theme"),
				),

				ui.VStack(
					ui.SecondaryButton(func() {
						isPresented.Set(true)
					}).Title("Show Dialog"),

					ui.If(isPresented.Get(), ui.Modal(
						ui.Dialog(
							ui.VStack(
								ui.PrimaryButton(func() { showBanner(alert.IntentOk) }).Title("Show alert OK"),
								ui.PrimaryButton(func() { showBanner(alert.IntentSuccess) }).Title("Show alert Success"),
								ui.PrimaryButton(func() { showBanner(alert.IntentWarning) }).Title("Show alert Warning"),
								ui.PrimaryButton(func() { showBanner(alert.IntentError) }).Title("Show alert Error"),
								ui.PrimaryButton(func() { showBannerTechnicalError() }).Title("Show alert Technical error"),
							).Gap(ui.L16),
						),
					).OnDismissRequest(func() {
						isPresented.Set(false)
					})),
				),
			).Gap(ui.L32).Padding(ui.Padding{}.All(ui.L16)).Frame(ui.Frame{}.MatchScreen())
		}))
	}).Run()
}

View on GitHub ↗ · run it with go run go.wdy.de/nago/example/cmd/tutorial-110-dialog-and-alerts@latest