/** * FIXTURE: helper-owned-compute-branches * Verifies: helper-owned branches inside computed() can mix compute-owned array * maps with reactive Writable captures without losing branch rewriting. * Expected transform: * - visibleProjects.map(...), project.badges.map(...), project.members.map(...), * and plainPreview.map(...) remain plain Array.map() calls in compute context * - fallbackMembers.map(...) still lowers because it comes from a closed-over * Writable array capture * - authored ifElse branches still lower safely around the mixed map behavior */ import { computed, ifElse, pattern, UI, Writable } from "commonfabric"; interface Badge { text: string; active: boolean; } interface Project { id: string; name: string; archived: boolean; members: string[]; badges: Badge[]; } // [TRANSFORM] pattern: type param stripped; input+output schemas appended after callback export default pattern<{ projects: Project[]; prefix: string; showArchived: boolean; }>((state) => { // [TRANSFORM] new Writable: schema arg injected const fallbackMembers = new Writable(["ops", "sales"]); // [TRANSFORM] computed() -> lift(): captures state.showArchived, state.projects const visibleProjects = computed(() => state.showArchived ? state.projects : state.projects.filter((project) => !project.archived) ); // [TRANSFORM] computed() -> lift(): captures visibleProjects (asOpaque), state.prefix, fallbackMembers (asCell — Writable) const rows = computed(() => // [TRANSFORM] .map() stays plain: visibleProjects is a captured computed input, plain inside this compute visibleProjects.map((project, projectIndex) => { // [TRANSFORM] .map() stays plain: ["alpha","beta"] is a literal array const plainPreview = ["alpha", "beta"].map((label, labelIndex) => `${project.name}-${labelIndex}-${label}` ); // [TRANSFORM] ifElse: schema args injected on authored ifElse return ifElse( project.badges.length > 0,