diff options
Diffstat (limited to 'frontend/ts/src/ui/layout.ts')
-rw-r--r-- | frontend/ts/src/ui/layout.ts | 34 |
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) + } +} |