mirror of
https://github.com/penpot/penpot.git
synced 2026-05-07 09:08:33 +00:00
Step toward issue #9260 (incremental migration of legacy UI components to the modern `*`-suffixed syntax, removing the per-render JS-to-Clojure props conversion overhead). Two unrelated namespaces, both clean Case-A migrations grouped in a single PR for review efficiency. frontend/src/app/main/ui/shapes/text/fontfaces.cljs --------------------------------------------------- Three components, all previously using `::mf/wrap-props false` with a custom memoizer (`#(mf/memo' % (mf/check-props ["fonts"]))`) and reading `fonts` via `(obj/get props "fonts")`. The custom memoizer existed because the legacy components received raw JS-object props, where the default `mf/memo` Clojure-equality comparison would always fail. - `fontfaces-style-html` → `fontfaces-style-html*` - `fontfaces-style-render` → `fontfaces-style-render*` - `fontfaces-style` → `fontfaces-style*` Migration: - Standard destructuring `[{:keys [fonts]}]` replaces the `[props]` + `(obj/get props "fonts")` pattern. - `::mf/wrap-props false` removed. - Custom memoizer collapses to `::mf/wrap [mf/memo]`. With modern destructuring the props are Clojure data, so default `=`-based memo is structurally correct (and a stronger guarantee than the previous shallow JS-prop check). - `app.util.object` require dropped from the namespace — it was only used for the `obj/get props "fonts"` reads that are now gone. - Internal call site of `fontfaces-style-render*` (within `fontfaces-style*`) keeps its `[:>` form, just with the new name. External call sites updated: - `frontend/src/app/main/render.cljs` — three sites (`[:& ff/fontfaces-style {:fonts fonts}]` × 3) → `[:> ff/fontfaces-style* {:fonts fonts}]`. - `frontend/src/app/main/ui/workspace/shapes.cljs` — one site, call signature unchanged. (Note: this caller passes `:shapes` rather than `:fonts`; the legacy component already ignored `:shapes` because it only read `(obj/get props "fonts")`, so the modern destructuring `{:keys [fonts]}` preserves the same behavior. Pre-existing bug, intentionally left out of scope.) frontend/src/app/main/ui/viewer/thumbnails.cljs ----------------------------------------------- Four components, all using standard destructuring already (no `::mf/wrap-props false`, no `unchecked-get`). Migration is the straight `*` rename plus `?`-prop renames per the prompt's mapping: - `thumbnails-content` → `thumbnails-content*` (`expanded?` → `is-expanded`) - `thumbnails-summary` → `thumbnails-summary*` (no `?`-props) - `thumbnail-item` → `thumbnail-item*` (`selected?` → `is-selected`; `::mf/wrap [mf/memo #(mf/deferred …)]` preserved) - `thumbnails-panel` → `thumbnails-panel*` (`show?` → `show` — no `is-` prefix needed, reads naturally as a verb) Internal callsites of all three sub-components in `thumbnails-panel*` updated to `[:> …*` with renamed kwargs (`:expanded?` → `:is-expanded`, `:selected?` → `:is-selected`). The `expanded?` symbol still appears in `thumbnails-panel*`'s body — it's a local `let`-binding deref'd from the `expanded-state` atom, not a component param, so the `?` suffix is preserved per the prompt's "local bindings stay" rule. External call sites updated: - `frontend/src/app/main/ui/viewer.cljs` — one site, plus the `:refer [thumbnails-panel]` → `:refer [thumbnails-panel*]` require update. Github #9260 Signed-off-by: FairyPigDev <luislee3108@gmail.com> Co-authored-by: Andrey Antukh <niwi@niwi.nz>