Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Show screens that are linked to the selected query #15487

Merged
merged 9 commits into from
Feb 7, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions packages/bbui/src/ActionButton/ActionButton.svelte
Original file line number Diff line number Diff line change
@@ -1,25 +1,25 @@
<script>
<script lang="ts">
import "@spectrum-css/actionbutton/dist/index-vars.css"
import Tooltip from "../Tooltip/Tooltip.svelte"
import { fade } from "svelte/transition"
import { hexToRGBA } from "../helpers"

export let quiet = false
export let selected = false
export let disabled = false
export let icon = ""
export let size = "M"
export let active = false
export let fullWidth = false
export let noPadding = false
export let tooltip = ""
export let accentColor = null
export let quiet: boolean = false
export let selected: boolean = false
export let disabled: boolean = false
export let icon: string = ""
export let size: "S" | "M" | "L" = "M"
export let active: boolean = false
export let fullWidth: boolean = false
export let noPadding: boolean = false
export let tooltip: string = ""
export let accentColor: string | null = null

let showTooltip = false

$: accentStyle = getAccentStyle(accentColor)

const getAccentStyle = color => {
const getAccentStyle = (color: string | null) => {
if (!color) {
return ""
}
Expand Down
18 changes: 9 additions & 9 deletions packages/bbui/src/List/ListItem.svelte
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
<script>
<script lang="ts">
import Icon from "../Icon/Icon.svelte"
import StatusLight from "../StatusLight/StatusLight.svelte"

export let icon = null
export let iconColor = null
export let title = null
export let subtitle = null
export let url = null
export let hoverable = false
export let showArrow = false
export let selected = false
export let icon: string | undefined = undefined
export let iconColor: string | undefined = undefined
export let title: string | undefined = undefined
export let subtitle: string | undefined = undefined
export let url: string | undefined = undefined
export let hoverable: boolean = false
export let showArrow: boolean = false
export let selected: boolean = false
</script>

<a
Expand Down
Original file line number Diff line number Diff line change
@@ -1,20 +1,29 @@
<script>
import { ActionButton, List, ListItem, Button } from "@budibase/bbui"
import DetailPopover from "@/components/common/DetailPopover.svelte"
import { screenStore, appStore } from "@/stores/builder"
<script lang="ts">
import { Button } from "@budibase/bbui"
import ScreensPopover from "@/components/common/ScreensPopover.svelte"
import { screenStore } from "@/stores/builder"
import { getContext, createEventDispatcher } from "svelte"

const { datasource } = getContext("grid")
import type { Screen, ScreenUsage } from "@budibase/types"
const dispatch = createEventDispatcher()

let popover
const { datasource }: { datasource: any } = getContext("grid")

let popover: any

$: ds = $datasource
$: resourceId = ds?.type === "table" ? ds.tableId : ds?.id
$: connectedScreens = findConnectedScreens($screenStore.screens, resourceId)
$: screenCount = connectedScreens.length
$: screenUsage = connectedScreens.map(
(screen: Screen): ScreenUsage => ({
url: screen.routing?.route,
_id: screen._id!,
})
)

const findConnectedScreens = (screens, resourceId) => {
const findConnectedScreens = (
screens: Screen[],
resourceId: string
): Screen[] => {
return screens.filter(screen => {
return JSON.stringify(screen).includes(`"${resourceId}"`)
})
Expand All @@ -26,34 +35,16 @@
}
</script>

<DetailPopover title="Screens" bind:this={popover}>
<svelte:fragment slot="anchor" let:open>
<ActionButton
icon="WebPage"
selected={open || screenCount}
quiet
accentColor="#364800"
>
Screens{screenCount ? `: ${screenCount}` : ""}
</ActionButton>
</svelte:fragment>
{#if !connectedScreens.length}
There aren't any screens connected to this data.
{:else}
The following screens are connected to this data.
<List>
{#each connectedScreens as screen}
<ListItem
title={screen.routing.route}
url={`/builder/app/${$appStore.appId}/design/${screen._id}`}
showArrow
/>
{/each}
</List>
{/if}
<div>
<ScreensPopover
bind:this={popover}
screens={screenUsage}
icon="WebPage"
accentColor="#364800"
showCount
>
<svelte:fragment slot="footer">
<Button secondary icon="WebPage" on:click={generateScreen}>
Generate app screen
</Button>
</div>
</DetailPopover>
</svelte:fragment>
</ScreensPopover>
58 changes: 58 additions & 0 deletions packages/builder/src/components/common/ScreensPopover.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
<script lang="ts">
import {
List,
ListItem,
ActionButton,
PopoverAlignment,
} from "@budibase/bbui"
import DetailPopover from "@/components/common/DetailPopover.svelte"
import { appStore } from "@/stores/builder"
import type { ScreenUsage } from "@budibase/types"

export let screens: ScreenUsage[] = []
export let icon = "DeviceDesktop"
export let accentColor: string | null | undefined = null
export let showCount = false
export let align = PopoverAlignment.Left

let popover: any

export function show() {
popover?.show()
}

export function hide() {
popover?.hide()
}
</script>

<DetailPopover title="Screens" bind:this={popover} {align}>
<svelte:fragment slot="anchor" let:open>
<ActionButton
{icon}
quiet
selected={open || !!(showCount && screens.length)}
{accentColor}
on:click={show}
>
Screens{showCount && screens.length ? `: ${screens.length}` : ""}
</ActionButton>
</svelte:fragment>

{#if !screens.length}
There aren't any screens connected to this data.
{:else}
The following screens are connected to this data.
<List>
{#each screens as screen}
<ListItem
title={screen.url}
url={`/builder/app/${$appStore.appId}/design/${screen._id}`}
showArrow
/>
{/each}
</List>
{/if}

<slot name="footer" />
</DetailPopover>
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<script lang="ts">
import { onMount } from "svelte"

import { screenStore } from "@/stores/builder"
import ScreensPopover from "@/components/common/ScreensPopover.svelte"
import type { ScreenUsage } from "@budibase/types"

export let sourceId: string

let screens: ScreenUsage[] = []
let popover: any

export function show() {
popover?.show()
}

export function hide() {
popover?.hide()
}

onMount(async () => {
let response = await screenStore.usageInScreens(sourceId)
screens = response?.screens
})
</script>

<ScreensPopover
bind:this={popover}
{screens}
icon="WebPage"
accentColor="#364800"
showCount
/>
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
import ExtraQueryConfig from "./ExtraQueryConfig.svelte"
import QueryViewerSavePromptModal from "./QueryViewerSavePromptModal.svelte"
import { Utils } from "@budibase/frontend-core"
import ConnectedQueryScreens from "./ConnectedQueryScreens.svelte"

export let query
let queryHash
Expand Down Expand Up @@ -170,6 +171,7 @@
</Body>
</div>
<div class="controls">
<ConnectedQueryScreens sourceId={query._id} />
<Button disabled={loading} on:click={runQuery} overBackground>
<Icon size="S" name="Play" />
Run query</Button
Expand Down Expand Up @@ -384,6 +386,8 @@
}

.controls {
display: flex;
align-items: center;
flex-shrink: 0;
}

Expand Down
16 changes: 13 additions & 3 deletions packages/builder/src/components/integration/RestQueryViewer.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@
runtimeToReadableMap,
toBindingsArray,
} from "@/dataBinding"
import ConnectedQueryScreens from "./ConnectedQueryScreens.svelte"

export let queryId

Expand Down Expand Up @@ -502,9 +503,12 @@
on:change={() => (query.flags.urlName = false)}
on:save={saveQuery}
/>
<div class="access">
<Label>Access</Label>
<AccessLevelSelect {query} {saveId} />
<div class="controls">
<ConnectedQueryScreens sourceId={query._id} />
<div class="access">
<Label>Access</Label>
<AccessLevelSelect {query} {saveId} />
</div>
</div>
</div>
<div class="url-block">
Expand Down Expand Up @@ -825,6 +829,12 @@
justify-content: space-between;
}

.controls {
display: flex;
align-items: center;
gap: var(--spacing-m);
}

.access {
display: flex;
gap: var(--spacing-m);
Expand Down
Loading