<script> import { backendUiStore } from "builderStore" import { DropdownMenu, Button, Icon, Input, Select } from "@budibase/bbui" import { FIELDS } from "constants/backend" import CreateEditColumnPopover from "./CreateEditColumnPopover.svelte" import ConfirmDialog from "components/common/ConfirmDialog.svelte" import { notifier } from "../../../../builderStore/store/notifications" export let field let anchor let dropdown let editing let confirmDeleteDialog $: sortColumn = $backendUiStore.sort && $backendUiStore.sort.column $: sortDirection = $backendUiStore.sort && $backendUiStore.sort.direction $: type = field?.type function showEditor() { editing = true } function hideEditor() { dropdown.hide() editing = false } function showDelete() { dropdown.hide() confirmDeleteDialog.show() } function deleteColumn() { if (field.name === $backendUiStore.selectedTable.primaryDisplay) { notifier.danger("You cannot delete the display column") } else { backendUiStore.actions.tables.deleteField(field) notifier.success("Column deleted") } hideEditor() } function sort(direction, column) { backendUiStore.update(state => { if (direction !== "none") { state.sort = { direction, column } } else { state.sort = undefined } return state }) hideEditor() } </script> <div class="container" bind:this={anchor} on:click={dropdown.show}> <span>{field.name}</span> <Icon name="arrowdown" /> </div> <DropdownMenu bind:this={dropdown} {anchor} align="left"> {#if editing} <h5>Edit Column</h5> <CreateEditColumnPopover onClosed={hideEditor} {field} /> {:else} <ul> {#if type !== 'link'} <li data-cy="edit-column-header" on:click={showEditor}> <Icon name="edit" /> Edit </li> {/if} <li data-cy="delete-column-header" on:click={showDelete}> <Icon name="delete" /> Delete </li> {#if sortDirection === 'desc' || sortDirection === 'asc'} <li on:click={() => sort('none', field.name)}> <Icon name="close" /> Remove sort </li> {/if} {#if sortDirection === 'desc' || sortColumn !== field.name} <li on:click={() => sort('asc', field.name)}> <Icon name="sortascending" /> Sort A - Z </li> {/if} {#if sortDirection === 'asc' || sortColumn !== field.name} <li on:click={() => sort('desc', field.name)}> <Icon name="sortdescending" /> Sort Z - A </li> {/if} </ul> {/if} </DropdownMenu> <ConfirmDialog bind:this={confirmDeleteDialog} body={`Are you sure you wish to delete this column? Your data will be deleted and this action cannot be undone.`} okText="Delete Column" onOk={deleteColumn} title="Confirm Delete" /> <style> .container { display: flex; flex-direction: row; justify-content: flex-start; align-items: center; gap: var(--spacing-xs); } h5 { padding: var(--spacing-xl) 0 0 var(--spacing-xl); margin: 0; font-weight: 500; } ul { list-style: none; padding-left: 0; margin: 0; padding: var(--spacing-s) 0; } li { display: flex; font-family: var(--font-sans); font-size: var(--font-size-xs); color: var(--ink); padding: var(--spacing-s) var(--spacing-m); margin: auto 0px; align-items: center; cursor: pointer; } li:hover { background-color: var(--grey-2); } li:active { color: var(--blue); } </style>