tanishqgandhi1908 opened a new pull request, #8383:
URL: https://github.com/apache/texera/pull/8383

   ### What changes were proposed in this PR?
   
   Workflow covers never rendered on the Hub landing page: every card under 
**Top Loved Workflows** and **Top Cloned Workflows** showed the grey 
placeholder, even for a workflow whose owner had set a cover, while the same 
workflow showed it correctly in Your Work → Workflows.
   
   Covers reach the frontend two different ways. A **workflow** cover is a 
downscaled **data URL** that arrives inline on the list payload and lands on 
`DashboardEntry.coverImageUrl`. A **dataset** or **model** cover is a committed 
file, so what arrives is a *path* and the card has to fetch a presigned URL 
from `/{id}/cover-url`.
   
   `browse-section` only ever handled the second kind — it asks the descriptor 
for a `coverUrl` and bails when there is none, which is always the case for a 
workflow, since `WorkflowResourceDescriptor` deliberately declares none. So 
nothing was ever cached for a workflow and `getCoverImage` fell through to the 
default.
   
   `getCoverImage` now reads a workflow's cover straight off the entry, 
mirroring the branch `card-item.component.ts:197-202` already had.
   
   
   Also included, since it is one line in the same area and needs no separate 
issue: `frontend/proxy.config.json` declared `"/api/model/**"` **twice** (both 
pointing at `:9092`, so the last silently won). The duplicate is removed, 
leaving the entry beside `/api/dataset`, so the file reads `dataset`, `model`, 
`access/dataset`, `access/model`.
   
   **Before** — both workflows are public; the left one has a cover, the right 
one does not:
   
   <img width="1440" height="900" alt="issue5-1-hub-landing-before" 
src="https://github.com/user-attachments/assets/120c2cf3-2ee9-49e0-97df-a77e3746275c";
 />
   
   **After** — the left card renders its cover, the right one still shows the 
placeholder:
   
   <img width="1440" height="900" alt="issue5-1-hub-landing-after" 
src="https://github.com/user-attachments/assets/9c0294a0-f081-4428-a230-80281a40cb7a";
 />
   
   ### Any related issues, documentation, discussions?
   
   Closes #8382.
   
   ### How was this PR tested?
   
   `browse-section.component.spec.ts`, 25 passed:
   
   - `renders a workflow's cover from the entry, since no cover is ever fetched 
for one` — a workflow
     with a cover resolves to it, one without still gets the default.
   - `keeps a file-backed kind on the placeholder rather than rendering its 
stored cover path` — a
     dataset whose presigned fetch answers with an empty URL stays on the 
placeholder instead of
     rendering `v1/images/preview.png`.
   - `skips an entity whose descriptor resolves no cover, rather than calling 
undefined` was already
     there and asserted `getCoverImage(workflow) === defaultBackground` — it 
pinned the bug, so it now
     asserts the cover comes off the entry, with the unregistered-kind row 
still falling back.
   
   `landing-page.component.spec.ts` also run, 17 passed.
   
   ```
   cd frontend
   npx ng test --include 
src/app/hub/component/browse-section/browse-section.component.spec.ts
   npx ng test --include 
src/app/hub/component/landing-page/landing-page.component.spec.ts
   ```
   
   Checked by hand against a local stack: a public workflow with a cover set 
from the dashboard now
   shows it in both hub sections, and a public workflow without one is 
unchanged.
   
   ### Was this PR authored or co-authored using generative AI tooling?
   
   Generated-by: Claude Code (Opus 5)


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to