Updating hover and navigation stores.

This commit is contained in:
mike12345567 2024-12-20 14:00:59 +00:00
parent 8c0c765333
commit fbeb15d186
5 changed files with 31 additions and 22 deletions

View File

@ -2,19 +2,24 @@ import { get } from "svelte/store"
import { previewStore } from "stores/builder" import { previewStore } from "stores/builder"
import { BudiStore } from "../BudiStore" import { BudiStore } from "../BudiStore"
interface BuilderHoverStore {
hoverTimeout?: NodeJS.Timeout
componentId: string | null
}
export const INITIAL_HOVER_STATE = { export const INITIAL_HOVER_STATE = {
componentId: null, componentId: null,
} }
export class HoverStore extends BudiStore { export class HoverStore extends BudiStore<BuilderHoverStore> {
hoverTimeout hoverTimeout?: NodeJS.Timeout
constructor() { constructor() {
super({ ...INITIAL_HOVER_STATE }) super({ ...INITIAL_HOVER_STATE })
this.hover = this.hover.bind(this) this.hover = this.hover.bind(this)
} }
hover(componentId, notifyClient = true) { hover(componentId: string, notifyClient = true) {
clearTimeout(this.hoverTimeout) clearTimeout(this.hoverTimeout)
if (componentId) { if (componentId) {
this.processHover(componentId, notifyClient) this.processHover(componentId, notifyClient)
@ -25,7 +30,7 @@ export class HoverStore extends BudiStore {
} }
} }
processHover(componentId, notifyClient) { processHover(componentId: string, notifyClient?: boolean) {
if (componentId === get(this.store).componentId) { if (componentId === get(this.store).componentId) {
return return
} }

View File

@ -2,27 +2,22 @@ import { get } from "svelte/store"
import { API } from "api" import { API } from "api"
import { appStore } from "stores/builder" import { appStore } from "stores/builder"
import { BudiStore } from "../BudiStore" import { BudiStore } from "../BudiStore"
import { AppNavigation, AppNavigationLink, UIObject } from "@budibase/types"
interface BuilderNavigationStore extends AppNavigation {}
export const INITIAL_NAVIGATION_STATE = { export const INITIAL_NAVIGATION_STATE = {
navigation: "Top", navigation: "Top",
links: [], links: [],
title: null,
sticky: null,
hideLogo: null,
logoUrl: null,
hideTitle: null,
textAlign: "Left", textAlign: "Left",
navBackground: null,
navWidth: null,
navTextColor: null,
} }
export class NavigationStore extends BudiStore { export class NavigationStore extends BudiStore<BuilderNavigationStore> {
constructor() { constructor() {
super(INITIAL_NAVIGATION_STATE) super(INITIAL_NAVIGATION_STATE)
} }
syncAppNavigation(nav) { syncAppNavigation(nav: AppNavigation) {
this.update(state => ({ this.update(state => ({
...state, ...state,
...nav, ...nav,
@ -33,15 +28,17 @@ export class NavigationStore extends BudiStore {
this.store.set({ ...INITIAL_NAVIGATION_STATE }) this.store.set({ ...INITIAL_NAVIGATION_STATE })
} }
async save(navigation) { async save(navigation: AppNavigation) {
const appId = get(appStore).appId const appId = get(appStore).appId
const app = await API.saveAppMetadata(appId, { navigation }) const app = await API.saveAppMetadata(appId, { navigation })
this.syncAppNavigation(app.navigation) if (app.navigation) {
this.syncAppNavigation(app.navigation)
}
} }
async saveLink(url, title, roleId) { async saveLink(url: string, title: string, roleId: string) {
const navigation = get(this.store) const navigation = get(this.store)
let links = [...(navigation?.links ?? [])] let links: AppNavigationLink[] = [...(navigation?.links ?? [])]
// Skip if we have an identical link // Skip if we have an identical link
if (links.find(link => link.url === url && link.text === title)) { if (links.find(link => link.url === url && link.text === title)) {
@ -60,7 +57,7 @@ export class NavigationStore extends BudiStore {
}) })
} }
async deleteLink(urls) { async deleteLink(urls: string[] | string) {
const navigation = get(this.store) const navigation = get(this.store)
let links = navigation?.links let links = navigation?.links
if (!links?.length) { if (!links?.length) {
@ -86,7 +83,7 @@ export class NavigationStore extends BudiStore {
}) })
} }
syncMetadata(metadata) { syncMetadata(metadata: UIObject) {
const { navigation } = metadata const { navigation } = metadata
this.syncAppNavigation(navigation) this.syncAppNavigation(navigation)
} }

View File

@ -1,5 +1,6 @@
import { User, Document, Plugin, Snippet } from "../" import { User, Document, Plugin, Snippet } from "../"
import { SocketSession } from "../../sdk" import { SocketSession } from "../../sdk"
import { NavLink } from "../../ui"
export type AppMetadataErrors = { [key: string]: string[] } export type AppMetadataErrors = { [key: string]: string[] }
@ -37,8 +38,8 @@ export interface AppInstance {
export interface AppNavigation { export interface AppNavigation {
navigation: string navigation: string
title: string title?: string
navWidth: string navWidth?: string
sticky?: boolean sticky?: boolean
hideLogo?: boolean hideLogo?: boolean
logoUrl?: string logoUrl?: string
@ -46,6 +47,7 @@ export interface AppNavigation {
navBackground?: string navBackground?: string
navTextColor?: string navTextColor?: string
links?: AppNavigationLink[] links?: AppNavigationLink[]
textAlign?: string
} }
export interface AppNavigationLink { export interface AppNavigationLink {
@ -53,6 +55,8 @@ export interface AppNavigationLink {
url: string url: string
id?: string id?: string
roleId?: string roleId?: string
type?: string
subLinks?: AppNavigationLink[]
} }
export interface AppCustomTheme { export interface AppCustomTheme {

View File

@ -1 +1,2 @@
export * from "./integration" export * from "./integration"
export * from "./misc"

View File

@ -0,0 +1,2 @@
// type purely to capture structures that the type is unknown, but maybe known later
export type UIObject = Record<string, any>