forked from tsai/budibase
21 changed files with 294 additions and 80 deletions
@ -0,0 +1,15 @@ |
|||
<script> |
|||
import { getContext } from "svelte" |
|||
import ClassBuilder from "../ClassBuilder.js" |
|||
|
|||
export let _bb |
|||
|
|||
const cb = getContext("BBMD:data-table:cb") |
|||
|
|||
let tbody |
|||
|
|||
$: tbody && _bb.attachChildren(tbody) |
|||
|
|||
</script> |
|||
|
|||
<tbody bind:this={tbody} class={cb.elem`content`}></tbody> |
|||
@ -0,0 +1,11 @@ |
|||
<script> |
|||
|
|||
export let _bb |
|||
|
|||
let thead |
|||
|
|||
$: thead && _bb.attachChildren(thead) |
|||
|
|||
</script> |
|||
|
|||
<thead bind:this={thead} class=className></thead> |
|||
@ -1,2 +1,6 @@ |
|||
import "./_style.scss"; |
|||
export { default as Datatable } from "./Datatable.svelte"; |
|||
import "./_style.scss" |
|||
export { default as Datatable } from "./Datatable.svelte" |
|||
export { default as DatatableCell } from "./DatatableCell.svelte" |
|||
export { default as DatatableHead } from "./DatatableHead.svelte" |
|||
export { default as DatatableBody } from "./DatatableBody.svelte" |
|||
export { default as DatatableRow } from "./DatatableRow.svelte" |
|||
|
|||
@ -0,0 +1,69 @@ |
|||
export default ({ indexes, helpers }) => |
|||
indexes.map(i => ({ |
|||
name: `Table based on index: ${i.name} `, |
|||
props: tableProps(i, helpers.indexSchema(i)), |
|||
})) |
|||
|
|||
const tableProps = (index, indexSchema) => ({ |
|||
_component: "@budibase/materialdesign-components/Datatable", |
|||
_children: [ |
|||
{ |
|||
_component: "@budibase/materialdesign-components/DatatableHead", |
|||
_children: [ |
|||
{ |
|||
_component: "@budibase/materialdesign-components/DatatableRow", |
|||
isHeader: true, |
|||
_children: columnHeaders(indexSchema), |
|||
}, |
|||
], |
|||
}, |
|||
{ |
|||
_component: "@budibase/materialdesign-components/DatatableBody", |
|||
_children: [ |
|||
{ |
|||
_code: rowCode(index), |
|||
_component: "@budibase/materialdesign-components/DatatableRow", |
|||
_children: dataCells(index, indexSchema), |
|||
}, |
|||
], |
|||
}, |
|||
], |
|||
}) |
|||
|
|||
const columnHeaders = indexSchema => |
|||
indexSchema.map(col => ({ |
|||
_component: "@budibase/materialdesign-components/DatatableCell", |
|||
isHeader: true, |
|||
_children: [ |
|||
{ |
|||
_component: "@budibase/standard-components/text", |
|||
type: "none", |
|||
text: col.name, |
|||
}, |
|||
], |
|||
})) |
|||
|
|||
const dataCells = (index, indexSchema) => |
|||
indexSchema.map(col => ({ |
|||
_component: "@budibase/materialdesign-components/DatatableCell", |
|||
_children: [ |
|||
{ |
|||
_component: "@budibase/standard-components/text", |
|||
type: "none", |
|||
text: { |
|||
"##bbstate": `${dataItem(index)}.${col.name}`, |
|||
"##bbstatefallback": "", |
|||
"##bbsource": "context", |
|||
}, |
|||
}, |
|||
], |
|||
})) |
|||
|
|||
const dataItem = index => `${index.name}_item` |
|||
const dataCollection = index => `store.${index.name}` |
|||
const rowCode = index => |
|||
` |
|||
if (!${dataCollection(index)}) return |
|||
|
|||
for (let ${dataItem(index)} of ${dataCollection(index)}) |
|||
render( { ${dataItem(index)}) }` |
|||
@ -1,25 +1,3 @@ |
|||
import { |
|||
H1, |
|||
Overline, |
|||
Button, |
|||
Icon, |
|||
Textfield, |
|||
Checkbox, |
|||
Checkboxgroup, |
|||
Radiobutton, |
|||
Radiobuttongroup, |
|||
Datatable, |
|||
} from "@BBMD" |
|||
import * as components from "@BBMD" |
|||
|
|||
export default { |
|||
H1, |
|||
Overline, |
|||
Button, |
|||
Icon, |
|||
Textfield, |
|||
Checkbox, |
|||
Checkboxgroup, |
|||
Radiobutton, |
|||
Radiobuttongroup, |
|||
Datatable, |
|||
} |
|||
export default components |
|||
|
|||
@ -0,0 +1,19 @@ |
|||
<script> |
|||
|
|||
import { buildStyle } from "./buildStyle" |
|||
|
|||
export let className = ""; |
|||
export let url = ""; |
|||
export let description = "" |
|||
export let height |
|||
export let width |
|||
|
|||
$: style = buildStyle({height, width}) |
|||
|
|||
</script> |
|||
|
|||
|
|||
<img class={className} |
|||
style={style} |
|||
src={url} |
|||
alt={description} > |
|||
@ -0,0 +1,18 @@ |
|||
<script> |
|||
|
|||
export let url = "" |
|||
export let text = "" |
|||
export let openInNewTab = false |
|||
|
|||
export let _bb |
|||
|
|||
let anchorElement |
|||
|
|||
$: anchorElement && !text && _bb.attachChildren(anchorElement) |
|||
$: target = openInNewTab ? "_blank" : "_self" |
|||
|
|||
</script> |
|||
|
|||
<a href={url} bind:this={anchorElement} target={target}>{text}</a> |
|||
|
|||
|
|||
@ -0,0 +1,12 @@ |
|||
<script> |
|||
|
|||
export let className="" |
|||
export let _bb |
|||
|
|||
let thead |
|||
|
|||
$: _bb.attachChildren(thead) |
|||
|
|||
</script> |
|||
|
|||
<tbody bind:this={thead} class=className></tbody> |
|||
@ -0,0 +1,12 @@ |
|||
<script> |
|||
|
|||
export let className="" |
|||
export let _bb |
|||
|
|||
let thead |
|||
|
|||
$: _bb.attachChildren(thead) |
|||
|
|||
</script> |
|||
|
|||
<thead bind:this={thead} class=className></thead> |
|||
Loading…
Reference in new issue