diff --git a/packages/backend-core/src/cache/docWritethrough.ts b/packages/backend-core/src/cache/docWritethrough.ts index 51018b2317..1b129bb26a 100644 --- a/packages/backend-core/src/cache/docWritethrough.ts +++ b/packages/backend-core/src/cache/docWritethrough.ts @@ -10,6 +10,7 @@ interface ProcessDocMessage { } const PERSIST_MAX_ATTEMPTS = 100 +let processor: DocWritethroughProcessor | undefined export const docWritethroughProcessorQueue = createQueue( JobQueue.DOC_WRITETHROUGH_QUEUE, @@ -61,8 +62,6 @@ class DocWritethroughProcessor { } } -export const processor = new DocWritethroughProcessor().init() - export class DocWritethrough { private db: Database private _docId: string @@ -84,3 +83,15 @@ export class DocWritethrough { }) } } + +export function init(): DocWritethroughProcessor { + processor = new DocWritethroughProcessor().init() + return processor +} + +export function getProcessor(): DocWritethroughProcessor { + if (!processor) { + return init() + } + return processor +} diff --git a/packages/backend-core/src/cache/tests/docWritethrough.spec.ts b/packages/backend-core/src/cache/tests/docWritethrough.spec.ts index d90c83afd3..5fe09b95ff 100644 --- a/packages/backend-core/src/cache/tests/docWritethrough.spec.ts +++ b/packages/backend-core/src/cache/tests/docWritethrough.spec.ts @@ -7,6 +7,7 @@ import { getDB } from "../../db" import { DocWritethrough, docWritethroughProcessorQueue, + init, } from "../docWritethrough" import InMemoryQueue from "../../queue/inMemoryQueue" @@ -19,6 +20,10 @@ async function waitForQueueCompletion() { } describe("docWritethrough", () => { + beforeAll(() => { + init() + }) + const config = new DBTestConfiguration() const db = getDB(structures.db.id()) diff --git a/packages/client/manifest.json b/packages/client/manifest.json index 10f9c5f412..531e2c968a 100644 --- a/packages/client/manifest.json +++ b/packages/client/manifest.json @@ -1137,6 +1137,12 @@ "key": "color", "showInBar": true }, + { + "type": "color", + "label": "Text Color", + "key": "textColor", + "showInBar": true + }, { "type": "boolean", "label": "Allow delete", diff --git a/packages/client/src/components/app/Tag.svelte b/packages/client/src/components/app/Tag.svelte index 2d0a26ac71..4644161506 100644 --- a/packages/client/src/components/app/Tag.svelte +++ b/packages/client/src/components/app/Tag.svelte @@ -6,6 +6,7 @@ export let onClick export let text = "" export let color + export let textColor export let closable = false export let size = "M" @@ -14,7 +15,7 @@ // Add color styles to main styles object, otherwise the styleable helper // overrides the color when it's passed as inline style. - $: styles = enrichStyles($component.styles, color) + $: styles = enrichStyles($component.styles, color, textColor) $: componentText = getComponentText(text, $builderStore, $component) const getComponentText = (text, builderState, componentState) => { @@ -24,7 +25,7 @@ return text || componentState.name || "Placeholder text" } - const enrichStyles = (styles, color) => { + const enrichStyles = (styles, color, textColor) => { if (!color) { return styles } @@ -34,7 +35,7 @@ ...styles?.normal, "background-color": color, "border-color": color, - color: "white", + color: textColor || "white", "--spectrum-clearbutton-medium-icon-color": "white", }, } diff --git a/packages/server/src/startup.ts b/packages/server/src/startup.ts index abe931f503..2cedda1099 100644 --- a/packages/server/src/startup.ts +++ b/packages/server/src/startup.ts @@ -7,6 +7,7 @@ import { logging, tenancy, users, + cache, } from "@budibase/backend-core" import fs from "fs" import { watch } from "./watch" @@ -74,6 +75,7 @@ export async function startup(app?: Koa, server?: Server) { eventEmitter.emitPort(env.PORT) fileSystem.init() await redis.init() + cache.docWritethrough.init() eventInit() if (app && server) { initialiseWebsockets(app, server) diff --git a/packages/worker/src/index.ts b/packages/worker/src/index.ts index 3da9a42065..4e770c6ecb 100644 --- a/packages/worker/src/index.ts +++ b/packages/worker/src/index.ts @@ -17,6 +17,7 @@ import { env as coreEnv, timers, redis, + cache, } from "@budibase/backend-core" db.init() @@ -90,6 +91,7 @@ export default server.listen(parseInt(env.PORT || "4002"), async () => { console.log(`Worker running on ${JSON.stringify(server.address())}`) await initPro() await redis.clients.init() + cache.docWritethrough.init() // configure events to use the pro audit log write // can't integrate directly into backend-core due to cyclic issues await events.processors.init(proSdk.auditLogs.write)