From 19fe2a4ba5ab05725974d71e6223121b195abd8e Mon Sep 17 00:00:00 2001 From: MickaelK Date: Sat, 6 Jan 2024 18:01:42 +1100 Subject: [PATCH] chore (refactoring): get rid of behavior subject --- .../ctrl_backend_component_storage.js | 4 +- .../pages/adminpage/ctrl_backend_state.js | 48 +++++++++++-------- 2 files changed, 30 insertions(+), 22 deletions(-) diff --git a/public/assets/pages/adminpage/ctrl_backend_component_storage.js b/public/assets/pages/adminpage/ctrl_backend_component_storage.js index 521d6b65..d4df2fe5 100644 --- a/public/assets/pages/adminpage/ctrl_backend_component_storage.js +++ b/public/assets/pages/adminpage/ctrl_backend_component_storage.js @@ -56,7 +56,7 @@ export default async function(render) { effect(init$.pipe( rxjs.mergeMap(($nodes) => $nodes), rxjs.mergeMap(($node) => onClick($node)), - rxjs.map(($node) => addBackendEnabled($node.getAttribute("data-label"))), + rxjs.mergeMap(($node) => addBackendEnabled($node.getAttribute("data-label"))), saveConnections(), )); @@ -106,7 +106,7 @@ export default async function(render) { rxjs.mergeMap(($nodes) => $nodes), rxjs.mergeMap(($node) => onClick($node.querySelector(".icons"))), rxjs.map(($node) => qs($node.parentElement, "input").value), - rxjs.map((label) => removeBackendEnabled(label)), + rxjs.mergeMap((label) => removeBackendEnabled(label)), saveConnections(), )); diff --git a/public/assets/pages/adminpage/ctrl_backend_state.js b/public/assets/pages/adminpage/ctrl_backend_state.js index aae8450b..ea6d5982 100644 --- a/public/assets/pages/adminpage/ctrl_backend_state.js +++ b/public/assets/pages/adminpage/ctrl_backend_state.js @@ -7,7 +7,7 @@ import { formObjToJSON$ } from "./helper_form.js"; export { getBackends as getBackendAvailable } from "./model_backend.js"; -const backendsEnabled$ = new rxjs.BehaviorSubject([]); +const backendsEnabled$ = new rxjs.ReplaySubject(1); export async function initStorage() { return await getConfig().pipe( @@ -21,32 +21,40 @@ export function getBackendEnabled() { } export function addBackendEnabled(type) { - const existingLabels = new Set(); - backendsEnabled$.value.forEach((obj) => { - existingLabels.add(obj.label.toLowerCase()); - }); + return backendsEnabled$.pipe( + rxjs.first(), + rxjs.map((backends) => { + const existingLabels = new Set(); + backends.forEach((obj) => { + existingLabels.add(obj.label.toLowerCase()); + }); - let label = ""; let i = 1; - while (true) { - label = type + (i === 1 ? "" : ` ${i}`); - if (existingLabels.has(label) === false) break; - i += 1; - } + let label = ""; let i = 1; + while (true) { + label = type + (i === 1 ? "" : ` ${i}`); + if (existingLabels.has(label) === false) break; + i += 1; + } - const b = backendsEnabled$.value.concat({ type, label }); - backendsEnabled$.next(b); - return b; + const b = backends.concat({ type, label }); + backendsEnabled$.next(b); + return b; + }), + ); } export function removeBackendEnabled(labelToRemove) { - const b = backendsEnabled$.value.filter(({ label }) => { - return label !== labelToRemove; - }); - backendsEnabled$.next(b); - return b; + return backendsEnabled$.pipe( + rxjs.first(), + rxjs.map((backends) => { + const b = backends.filter(({ label }) => label !== labelToRemove); + backendsEnabled$.next(b); + return b; + }), + ); } -const middlewareEnabled$ = new rxjs.BehaviorSubject(null); +const middlewareEnabled$ = new rxjs.ReplaySubject(1); export async function initMiddleware() { return await getAdminConfig().pipe(