1
0
Fork 0
mirror of synced 2024-07-08 15:56:23 +12:00

Update header cell popovers to use grid popover

This commit is contained in:
Andrew Kingston 2024-04-24 21:19:07 +01:00
parent b5eb60acd7
commit f45783f919
9 changed files with 86 additions and 110 deletions

View file

@ -11,7 +11,6 @@
export let invertX = false export let invertX = false
export let schema export let schema
export let maximum export let maximum
export let gridID
const { API, notifications } = getContext("grid") const { API, notifications } = getContext("grid")
const imageExtensions = ["png", "tiff", "gif", "raw", "jpg", "jpeg"] const imageExtensions = ["png", "tiff", "gif", "raw", "jpg", "jpeg"]
@ -96,7 +95,6 @@
<GridPopover <GridPopover
open={isOpen} open={isOpen}
{anchor} {anchor}
{gridID}
{invertX} {invertX}
maxHeight={null} maxHeight={null}
on:close={close} on:close={close}

View file

@ -22,7 +22,6 @@
export let invertY = false export let invertY = false
export let contentLines = 1 export let contentLines = 1
export let hidden = false export let hidden = false
export let gridID
const emptyError = writable(null) const emptyError = writable(null)
@ -97,7 +96,6 @@
{invertY} {invertY}
{invertX} {invertX}
{contentLines} {contentLines}
{gridID}
/> />
<slot /> <slot />
</GridCell> </GridCell>

View file

@ -11,7 +11,6 @@
export let readonly = false export let readonly = false
export let api export let api
export let invertX = false export let invertX = false
export let gridID
let isOpen let isOpen
let anchor let anchor

View file

@ -1,20 +1,14 @@
<script> <script>
import { getContext, onMount, tick } from "svelte" import { getContext, onMount, tick } from "svelte"
import { canBeDisplayColumn, canBeSortColumn } from "@budibase/shared-core" import { canBeDisplayColumn, canBeSortColumn } from "@budibase/shared-core"
import { import { Icon, Menu, MenuItem, Modal } from "@budibase/bbui"
Icon,
Popover,
Menu,
MenuItem,
clickOutside,
Modal,
} from "@budibase/bbui"
import GridCell from "./GridCell.svelte" import GridCell from "./GridCell.svelte"
import { getColumnIcon } from "../lib/utils" import { getColumnIcon } from "../lib/utils"
import MigrationModal from "../controls/MigrationModal.svelte" import MigrationModal from "../controls/MigrationModal.svelte"
import { debounce } from "../../../utils/utils" import { debounce } from "../../../utils/utils"
import { FieldType, FormulaType } from "@budibase/types" import { FieldType, FormulaType } from "@budibase/types"
import { TableNames } from "../../../constants" import { TableNames } from "../../../constants"
import GridPopover from "../overlays/GridPopover.svelte"
export let column export let column
export let idx export let idx
@ -24,7 +18,6 @@
reorder, reorder,
isReordering, isReordering,
isResizing, isResizing,
gridID,
sort, sort,
visibleColumns, visibleColumns,
dispatch, dispatch,
@ -67,6 +60,11 @@
$: searching = searchValue != null $: searching = searchValue != null
$: debouncedUpdateFilter(searchValue) $: debouncedUpdateFilter(searchValue)
const close = () => {
open = false
editIsOpen = false
}
const getSortingLabels = type => { const getSortingLabels = type => {
switch (type) { switch (type) {
case FieldType.NUMBER: case FieldType.NUMBER:
@ -310,88 +308,81 @@
</GridCell> </GridCell>
</div> </div>
<Popover {#if open}
bind:open <GridPopover {anchor} align="right" on:close={close} maxHeight={null}>
bind:this={popover} {#if editIsOpen}
{anchor} <div class="content">
align="right" <slot />
offset={0} </div>
popoverTarget={document.getElementById(gridID)} {:else}
customZindex={50} <Menu>
> <MenuItem
{#if editIsOpen} icon="Edit"
<div on:click={editColumn}
use:clickOutside={() => { disabled={!$config.canEditColumns || column.schema.disabled}
editIsOpen = false >
}} Edit column
class="content"
>
<slot />
</div>
{:else}
<Menu>
<MenuItem
icon="Edit"
on:click={editColumn}
disabled={!$config.canEditColumns || column.schema.disabled}
>
Edit column
</MenuItem>
<MenuItem
icon="Duplicate"
on:click={duplicateColumn}
disabled={!$config.canEditColumns}
>
Duplicate column
</MenuItem>
<MenuItem
icon="Label"
on:click={makeDisplayColumn}
disabled={idx === "sticky" || !canBeDisplayColumn(column.schema.type)}
>
Use as display column
</MenuItem>
<MenuItem
icon="SortOrderUp"
on:click={sortAscending}
disabled={!canBeSortColumn(column.schema.type) ||
(column.name === $sort.column && $sort.order === "ascending")}
>
Sort {sortingLabels.ascending}
</MenuItem>
<MenuItem
icon="SortOrderDown"
on:click={sortDescending}
disabled={!canBeSortColumn(column.schema.type) ||
(column.name === $sort.column && $sort.order === "descending")}
>
Sort {sortingLabels.descending}
</MenuItem>
<MenuItem disabled={!canMoveLeft} icon="ChevronLeft" on:click={moveLeft}>
Move left
</MenuItem>
<MenuItem
disabled={!canMoveRight}
icon="ChevronRight"
on:click={moveRight}
>
Move right
</MenuItem>
<MenuItem
disabled={idx === "sticky" || !$config.showControls}
icon="VisibilityOff"
on:click={hideColumn}
>
Hide column
</MenuItem>
{#if $config.canEditColumns && column.schema.type === "link" && column.schema.tableId === TableNames.USERS}
<MenuItem icon="User" on:click={openMigrationModal}>
Migrate to user column
</MenuItem> </MenuItem>
{/if} <MenuItem
</Menu> icon="Duplicate"
{/if} on:click={duplicateColumn}
</Popover> disabled={!$config.canEditColumns}
>
Duplicate column
</MenuItem>
<MenuItem
icon="Label"
on:click={makeDisplayColumn}
disabled={idx === "sticky" || !canBeDisplayColumn(column.schema.type)}
>
Use as display column
</MenuItem>
<MenuItem
icon="SortOrderUp"
on:click={sortAscending}
disabled={!canBeSortColumn(column.schema.type) ||
(column.name === $sort.column && $sort.order === "ascending")}
>
Sort {sortingLabels.ascending}
</MenuItem>
<MenuItem
icon="SortOrderDown"
on:click={sortDescending}
disabled={!canBeSortColumn(column.schema.type) ||
(column.name === $sort.column && $sort.order === "descending")}
>
Sort {sortingLabels.descending}
</MenuItem>
<MenuItem
disabled={!canMoveLeft}
icon="ChevronLeft"
on:click={moveLeft}
>
Move left
</MenuItem>
<MenuItem
disabled={!canMoveRight}
icon="ChevronRight"
on:click={moveRight}
>
Move right
</MenuItem>
<MenuItem
disabled={idx === "sticky" || !$config.showControls}
icon="VisibilityOff"
on:click={hideColumn}
>
Hide column
</MenuItem>
{#if $config.canEditColumns && column.schema.type === "link" && column.schema.tableId === TableNames.USERS}
<MenuItem icon="User" on:click={openMigrationModal}>
Migrate to user column
</MenuItem>
{/if}
</Menu>
{/if}
</GridPopover>
{/if}
<style> <style>
.header-cell { .header-cell {

View file

@ -13,7 +13,6 @@
export let api export let api
export let invertX export let invertX
export let contentLines = 1 export let contentLines = 1
export let gridID
let isOpen = false let isOpen = false
let focusedOptionIdx = null let focusedOptionIdx = null

View file

@ -14,11 +14,9 @@
export let schema export let schema
export let onChange export let onChange
export let invertX = false export let invertX = false
export let invertY = false
export let contentLines = 1 export let contentLines = 1
export let searchFunction = API.searchTable export let searchFunction = API.searchTable
export let primaryDisplay export let primaryDisplay
export let gridID
const color = getColor(0) const color = getColor(0)
@ -276,7 +274,7 @@
<!-- svelte-ignore a11y-no-static-element-interactions --> <!-- svelte-ignore a11y-no-static-element-interactions -->
<!-- svelte-ignore a11y-click-events-have-key-events --> <!-- svelte-ignore a11y-click-events-have-key-events -->
{#if isOpen} {#if isOpen}
<GridPopover open={isOpen} {anchor} {gridID} {invertX} on:close={close}> <GridPopover open={isOpen} {anchor} {invertX} on:close={close}>
<div class="dropdown" on:wheel|stopPropagation> <div class="dropdown" on:wheel|stopPropagation>
<div class="search"> <div class="search">
<Input <Input

View file

@ -20,7 +20,6 @@
dispatch, dispatch,
rows, rows,
columnRenderMap, columnRenderMap,
gridID,
} = getContext("grid") } = getContext("grid")
$: rowSelected = !!$selectedRows[row._id] $: rowSelected = !!$selectedRows[row._id]
@ -46,7 +45,6 @@
{row} {row}
{invertY} {invertY}
{rowFocused} {rowFocused}
{gridID}
invertX={columnIdx >= $columnHorizontalInversionIndex} invertX={columnIdx >= $columnHorizontalInversionIndex}
highlighted={rowHovered || rowFocused || reorderSource === column.name} highlighted={rowHovered || rowFocused || reorderSource === column.name}
selected={rowSelected} selected={rowSelected}

View file

@ -12,6 +12,7 @@
export let minWidth = PopoverMinWidth export let minWidth = PopoverMinWidth
export let maxWidth = PopoverMaxWidth export let maxWidth = PopoverMaxWidth
export let maxHeight = PopoverMaxHeight export let maxHeight = PopoverMaxHeight
export let align = "left"
const { gridID } = getContext("grid") const { gridID } = getContext("grid")
const dispatch = createEventDispatcher() const dispatch = createEventDispatcher()
@ -36,9 +37,9 @@
<Popover <Popover
open open
{anchor} {anchor}
align="left" {align}
portalTarget="#{gridID} .grid-popover-container" portalTarget="#{gridID} .grid-popover-container"
offset={1} offset={0}
> >
<div <div
class="grid-popover-contents" class="grid-popover-contents"

View file

@ -19,7 +19,6 @@
focusedRowId, focusedRowId,
notifications, notifications,
isDatasourcePlus, isDatasourcePlus,
gridID,
} = getContext("grid") } = getContext("grid")
let anchor let anchor
@ -56,12 +55,7 @@
{#if $menu.visible} {#if $menu.visible}
{#key style} {#key style}
<GridPopover <GridPopover {anchor} on:close={menu.actions.close} maxHeight={null}>
{anchor}
{gridID}
on:close={menu.actions.close}
maxHeight={null}
>
<Menu> <Menu>
<MenuItem <MenuItem
icon="Copy" icon="Copy"