aboutsummaryrefslogtreecommitdiff
path: root/frontend/ts/src/ui/layout.ts
diff options
context:
space:
mode:
Diffstat (limited to 'frontend/ts/src/ui/layout.ts')
-rw-r--r--frontend/ts/src/ui/layout.ts34
1 files changed, 34 insertions, 0 deletions
diff --git a/frontend/ts/src/ui/layout.ts b/frontend/ts/src/ui/layout.ts
new file mode 100644
index 0000000..0c41223
--- /dev/null
+++ b/frontend/ts/src/ui/layout.ts
@@ -0,0 +1,34 @@
+import { h, Html } from 'lib/rx'
+import * as icons from 'lib/icons'
+import * as L from 'lib/loadable'
+
+export function columns(xs: Array<Html>): Html {
+ return h('div', { className: 'g-Columns' }, xs)
+}
+
+export function loading(): Html {
+ return h('div',
+ { className: 'g-Loading' },
+ icons.spinner()
+ )
+}
+
+export function error(message: string): Html {
+ return h('div',
+ { className: 'g-Error' },
+ message
+ )
+}
+
+export function loadable<T>(loadable: L.Loadable<T>, view: (t: T) => Html): Html {
+ switch (loadable.key) {
+ case 'INIT':
+ return undefined
+ case 'LOADING':
+ return loading()
+ case 'LOADED':
+ return view(loadable.value)
+ case 'FAILURE':
+ return error(loadable.error)
+ }
+}