Skip to content
Navigation Split View

Navigation Split View

Two and three column layouts with navsplitview, with eagerly built views and with lazily evaluated view factories.

Navigation Split View

package main

import (
	"github.com/worldiety/option"
	"go.wdy.de/nago/application"
	"go.wdy.de/nago/presentation/core"
	"go.wdy.de/nago/presentation/ui"
	"go.wdy.de/nago/presentation/ui/navsplitview"
	"go.wdy.de/nago/web/vuejs"
)

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

		option.MustZero(cfg.StandardSystems())
		cfg.SetDecorator(cfg.NewScaffold().Decorator())

		cfg.RootViewWithDecoration(".", func(wnd core.Window) core.View {
			return ui.VStack(
				ui.Text("navsplitview demo"),
				navsplitview.TwoColumn(navsplitview.NavLinks{
					"a": ui.VStack(
						ui.Text("content"),
						navsplitview.ListItem(navsplitview.KindDetail, "detail_1", ui.Text("punkt 1")),
						navsplitview.ListItem(navsplitview.KindDetail, "detail_2", ui.Text("punkt 2")),
					).FullWidth(),
					"none": ui.VStack(
						ui.Text("nichts gewählt"),
					),
					"detail_1": ui.Text("detail 1"),
					"detail_2": ui.Text("detail 2"),
				}).
					Default("a", "none").
					FullWidth(),

				ui.Space(ui.L48),

				// note the ID which is used to identify the navsplitview and prepended in the links
				// also note that you can use a factory or lazy evaluated view factories
				ui.Text("navsplitview demo 2"),
				navsplitview.TwoColumn(navsplitview.NavFnLinks{
					"_": func(id navsplitview.ViewID) core.View {
						return ui.VStack(
							ui.HStack(ui.Text("A section").Color(ui.ColorIconsMuted)).FullWidth(),
							navsplitview.ListItem(navsplitview.KindDetail, "detail_1", ui.Text("lazy punkt 1")).Prefix("nsv2"),
							ui.HLine(),
							navsplitview.ListItem(navsplitview.KindDetail, "detail_2", ui.Text("lazy punkt 2")).Prefix("nsv2"),
						).FullWidth()
					},
					"none": func(id navsplitview.ViewID) core.View {
						return ui.VStack(
							ui.Text("lazy nichts gewählt"),
						)
					},
					"detail_1": func(id navsplitview.ViewID) core.View {
						return ui.Text("lazy detail 1")
					},
					"detail_2": func(id navsplitview.ViewID) core.View {
						return ui.Text("lazy detail 2")
					},
				}).ID("nsv2").
					Default("_", "none").
					FullWidth(),

				ui.Space(ui.L48),

				ui.Text("navsplitview 3 col"),
				navsplitview.ThreeColumn(navsplitview.NavLinks{
					"sb": ui.VStack(
						ui.Text("sidebar"),
						navsplitview.ListItem(navsplitview.KindContent, "c1", ui.Text("punkt 1")).
							Prefix("nsv3").
							DeleteTarget(navsplitview.KindDetail),
						navsplitview.ListItem(navsplitview.KindContent, "c2", ui.Text("punkt 2")).
							Prefix("nsv3").
							DeleteTarget(navsplitview.KindDetail),
					).FullWidth(),
					"none": ui.VStack(
						ui.Text("nichts gewählt"),
					),
					"c1": ui.VStack(
						ui.Text("content 1"),
						navsplitview.ListItem(navsplitview.KindDetail, "c1d1", ui.Text("punkt 1")).Prefix("nsv3"),
						navsplitview.ListItem(navsplitview.KindDetail, "c1d2", ui.Text("punkt 2")).Prefix("nsv3"),
					),

					"c2": ui.VStack(
						ui.Text("content 2"),
						navsplitview.ListItem(navsplitview.KindDetail, "c2d1", ui.Text("punkt 1")).Prefix("nsv3"),
						navsplitview.ListItem(navsplitview.KindDetail, "c2d2", ui.Text("punkt 2")).Prefix("nsv3"),
					),

					"c1d1": ui.Text("c1d1"),
					"c1d2": ui.Text("c1d2"),
					"c2d1": ui.Text("c2d1"),
					"c2d2": ui.Text("c2d2"),
				}).ID("nsv3").
					Default("sb", "none", "none").
					FullWidth(),
			).FullWidth()

		})

	}).Run()
}

View on GitHub ↗ · run it with go run go.wdy.de/nago/example/cmd/tutorial-87-navsplitview@latest