Allow setting visibilities via parameter
This commit is contained in:
parent
8f9995d04c
commit
31c1fa8b7a
|
@ -2,16 +2,29 @@
|
||||||
import { getContext } from "svelte"
|
import { getContext } from "svelte"
|
||||||
import { ActionButton, Popover } from "@budibase/bbui"
|
import { ActionButton, Popover } from "@budibase/bbui"
|
||||||
import ColumnsSettingContent from "./ColumnsSettingContent.svelte"
|
import ColumnsSettingContent from "./ColumnsSettingContent.svelte"
|
||||||
|
import { FieldPermissions } from "../../../constants"
|
||||||
|
|
||||||
export let allowViewReadonlyColumns = false
|
export let allowViewReadonlyColumns = false
|
||||||
|
|
||||||
const { columns } = getContext("grid")
|
const { columns, datasource } = getContext("grid")
|
||||||
|
|
||||||
let open = false
|
let open = false
|
||||||
let anchor
|
let anchor
|
||||||
|
|
||||||
$: anyRestricted = $columns.filter(col => !col.visible || col.readonly).length
|
$: anyRestricted = $columns.filter(col => !col.visible || col.readonly).length
|
||||||
$: text = anyRestricted ? `Columns (${anyRestricted} restricted)` : "Columns"
|
$: text = anyRestricted ? `Columns (${anyRestricted} restricted)` : "Columns"
|
||||||
|
|
||||||
|
$: permissions =
|
||||||
|
$datasource.type === "viewV2"
|
||||||
|
? [
|
||||||
|
FieldPermissions.WRITABLE,
|
||||||
|
FieldPermissions.READONLY,
|
||||||
|
FieldPermissions.HIDDEN,
|
||||||
|
]
|
||||||
|
: [FieldPermissions.WRITABLE, FieldPermissions.HIDDEN]
|
||||||
|
$: disabledPermissions = allowViewReadonlyColumns
|
||||||
|
? []
|
||||||
|
: [FieldPermissions.READONLY]
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<div bind:this={anchor}>
|
<div bind:this={anchor}>
|
||||||
|
@ -28,5 +41,9 @@
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<Popover bind:open {anchor} align="left">
|
<Popover bind:open {anchor} align="left">
|
||||||
<ColumnsSettingContent columns={$columns} {allowViewReadonlyColumns} />
|
<ColumnsSettingContent
|
||||||
|
columns={$columns}
|
||||||
|
{permissions}
|
||||||
|
{disabledPermissions}
|
||||||
|
/>
|
||||||
</Popover>
|
</Popover>
|
||||||
|
|
|
@ -6,11 +6,22 @@
|
||||||
import { helpers } from "@budibase/shared-core"
|
import { helpers } from "@budibase/shared-core"
|
||||||
import { FieldType } from "@budibase/types"
|
import { FieldType } from "@budibase/types"
|
||||||
import { tables } from "stores/builder"
|
import { tables } from "stores/builder"
|
||||||
|
import { FieldPermissions } from "../../../constants"
|
||||||
|
|
||||||
export let allowViewReadonlyColumns
|
export let permissions = [FieldPermissions.WRITABLE, FieldPermissions.HIDDEN]
|
||||||
|
export let disabledPermissions = []
|
||||||
export let columns
|
export let columns
|
||||||
|
|
||||||
const { datasource, dispatch } = getContext("grid")
|
const { datasource, dispatch } = getContext("grid")
|
||||||
|
$: permissionsObj = permissions.reduce(
|
||||||
|
(acc, c) => ({
|
||||||
|
...acc,
|
||||||
|
[c]: {
|
||||||
|
disabled: disabledPermissions.includes(c),
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
{}
|
||||||
|
)
|
||||||
|
|
||||||
$: allowRelationshipSchemas = true // TODO
|
$: allowRelationshipSchemas = true // TODO
|
||||||
let relationshipPanelOpen = false
|
let relationshipPanelOpen = false
|
||||||
|
@ -18,8 +29,8 @@
|
||||||
let relationshipPanelColumns = []
|
let relationshipPanelColumns = []
|
||||||
|
|
||||||
const toggleColumn = async (column, permission) => {
|
const toggleColumn = async (column, permission) => {
|
||||||
const visible = permission !== PERMISSION_OPTIONS.HIDDEN
|
const visible = permission !== FieldPermissions.HIDDEN
|
||||||
const readonly = permission === PERMISSION_OPTIONS.READONLY
|
const readonly = permission === FieldPermissions.READONLY
|
||||||
|
|
||||||
await datasource.actions.addSchemaMutation(column.name, {
|
await datasource.actions.addSchemaMutation(column.name, {
|
||||||
visible,
|
visible,
|
||||||
|
@ -36,60 +47,63 @@
|
||||||
dispatch(visible ? "show-column" : "hide-column")
|
dispatch(visible ? "show-column" : "hide-column")
|
||||||
}
|
}
|
||||||
|
|
||||||
const PERMISSION_OPTIONS = {
|
|
||||||
WRITABLE: "writable",
|
|
||||||
READONLY: "readonly",
|
|
||||||
HIDDEN: "hidden",
|
|
||||||
}
|
|
||||||
|
|
||||||
$: displayColumns = columns.map(c => {
|
$: displayColumns = columns.map(c => {
|
||||||
const isRequired = helpers.schema.isRequired(c.schema.constraints)
|
const isRequired = helpers.schema.isRequired(c.schema.constraints)
|
||||||
const requiredTooltip = isRequired && "Required columns must be writable"
|
const requiredTooltip = isRequired && "Required columns must be writable"
|
||||||
const editEnabled =
|
const editEnabled =
|
||||||
!isRequired ||
|
!isRequired || columnToPermissionOptions(c) !== FieldPermissions.WRITABLE
|
||||||
columnToPermissionOptions(c) !== PERMISSION_OPTIONS.WRITABLE
|
const options = []
|
||||||
const options = [
|
|
||||||
{
|
if (permissionsObj[FieldPermissions.WRITABLE]) {
|
||||||
icon: "Edit",
|
|
||||||
value: PERMISSION_OPTIONS.WRITABLE,
|
|
||||||
tooltip: (!editEnabled && requiredTooltip) || "Writable",
|
|
||||||
disabled: !editEnabled,
|
|
||||||
},
|
|
||||||
]
|
|
||||||
if ($datasource.type === "viewV2") {
|
|
||||||
options.push({
|
options.push({
|
||||||
icon: "Visibility",
|
icon: "Edit",
|
||||||
value: PERMISSION_OPTIONS.READONLY,
|
value: FieldPermissions.WRITABLE,
|
||||||
tooltip: allowViewReadonlyColumns
|
tooltip: (!editEnabled && requiredTooltip) || "Writable",
|
||||||
? requiredTooltip || "Read only"
|
disabled:
|
||||||
: "Read only (premium feature)",
|
!editEnabled || permissionsObj[FieldPermissions.WRITABLE].disabled,
|
||||||
disabled: !allowViewReadonlyColumns || isRequired,
|
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
options.push({
|
if (permissionsObj[FieldPermissions.READONLY]) {
|
||||||
icon: "VisibilityOff",
|
options.push({
|
||||||
value: PERMISSION_OPTIONS.HIDDEN,
|
icon: "Visibility",
|
||||||
disabled: c.primaryDisplay || isRequired,
|
value: FieldPermissions.READONLY,
|
||||||
tooltip:
|
tooltip: !permissionsObj[FieldPermissions.READONLY].disabled
|
||||||
(c.primaryDisplay && "Display column cannot be hidden") ||
|
? requiredTooltip || "Read only"
|
||||||
requiredTooltip ||
|
: "Read only (premium feature)",
|
||||||
"Hidden",
|
disabled:
|
||||||
})
|
permissionsObj[FieldPermissions.READONLY].disabled || isRequired,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
if (permissionsObj[FieldPermissions.HIDDEN]) {
|
||||||
|
options.push({
|
||||||
|
icon: "VisibilityOff",
|
||||||
|
value: FieldPermissions.HIDDEN,
|
||||||
|
disabled:
|
||||||
|
c.primaryDisplay ||
|
||||||
|
isRequired ||
|
||||||
|
permissionsObj[FieldPermissions.HIDDEN].disabled,
|
||||||
|
tooltip:
|
||||||
|
(c.primaryDisplay && "Display column cannot be hidden") ||
|
||||||
|
requiredTooltip ||
|
||||||
|
"Hidden",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
return { ...c, options }
|
return { ...c, options }
|
||||||
})
|
})
|
||||||
|
|
||||||
function columnToPermissionOptions(column) {
|
function columnToPermissionOptions(column) {
|
||||||
if (column.schema.visible === false) {
|
if (column.schema.visible === false) {
|
||||||
return PERMISSION_OPTIONS.HIDDEN
|
return FieldPermissions.HIDDEN
|
||||||
}
|
}
|
||||||
|
|
||||||
if (column.schema.readonly) {
|
if (column.schema.readonly) {
|
||||||
return PERMISSION_OPTIONS.READONLY
|
return FieldPermissions.READONLY
|
||||||
}
|
}
|
||||||
|
|
||||||
return PERMISSION_OPTIONS.WRITABLE
|
return FieldPermissions.WRITABLE
|
||||||
}
|
}
|
||||||
|
|
||||||
function onRelationshipOpen(column, domElement) {
|
function onRelationshipOpen(column, domElement) {
|
||||||
|
@ -109,6 +123,7 @@
|
||||||
schema: {
|
schema: {
|
||||||
...column,
|
...column,
|
||||||
visible: !!isPrimaryDisplay,
|
visible: !!isPrimaryDisplay,
|
||||||
|
readonly: isPrimaryDisplay || column.readonly,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -158,8 +173,8 @@
|
||||||
align="right-outside"
|
align="right-outside"
|
||||||
>
|
>
|
||||||
<svelte:self
|
<svelte:self
|
||||||
{allowViewReadonlyColumns}
|
|
||||||
columns={relationshipPanelColumns}
|
columns={relationshipPanelColumns}
|
||||||
|
permissions={[FieldPermissions.READONLY, FieldPermissions.HIDDEN]}
|
||||||
/>
|
/>
|
||||||
</Popover>
|
</Popover>
|
||||||
{/if}
|
{/if}
|
||||||
|
|
|
@ -161,3 +161,9 @@ export const TypeIconMap = {
|
||||||
export const OptionColours = [...new Array(12).keys()].map(idx => {
|
export const OptionColours = [...new Array(12).keys()].map(idx => {
|
||||||
return `hsla(${((idx + 1) * 222) % 360}, 90%, 75%, 0.3)`
|
return `hsla(${((idx + 1) * 222) % 360}, 90%, 75%, 0.3)`
|
||||||
})
|
})
|
||||||
|
|
||||||
|
export const FieldPermissions = {
|
||||||
|
WRITABLE: "writable",
|
||||||
|
READONLY: "readonly",
|
||||||
|
HIDDEN: "hidden",
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue