generated from CodeYourFuture/Module-Template
-
-
Notifications
You must be signed in to change notification settings - Fork 21
Glasgow | Prati Amalden | Module Legacy Code | New feature: Rebloom #57
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
PratiAmalden
wants to merge
7
commits into
CodeYourFuture:main
Choose a base branch
from
PratiAmalden:feature/rebloom
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from all commits
Commits
Show all changes
7 commits
Select commit
Hold shift + click to select a range
8649dc3
Add columns for rebloom
PratiAmalden 62a649f
feat(blooms): add rebloom creation, counts, and return original usern…
PratiAmalden 3e80f81
feat(api): add rebloom endpoint
PratiAmalden 67f5ff3
feat(ui): display rebloom info and counts in timeline
PratiAmalden 80b3dfd
feat(api): add postRebloom client request
PratiAmalden 2171adf
feat(ui) add rebloom elements to bloom template
PratiAmalden 0463651
style(ui) add minimal styling for rebloom info
PratiAmalden File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,4 @@ | ||
| import {apiService} from "../index.mjs" | ||
| /** | ||
| * Create a bloom component | ||
| * @param {string} template - The ID of the template to clone | ||
|
|
@@ -21,6 +22,10 @@ const createBloom = (template, bloom) => { | |
| const bloomTimeLink = bloomFrag.querySelector("a:has(> [data-time])"); | ||
| const bloomContent = bloomFrag.querySelector("[data-content]"); | ||
|
|
||
| const rebloomEl = bloomFrag.querySelector("[data-rebloom]") | ||
| const rebloomCount = bloomFrag.querySelector("[data-rebloom-count]"); | ||
| const rebloomBtn = bloomFrag.querySelector("[data-rebloom-button]"); | ||
|
|
||
| bloomArticle.setAttribute("data-bloom-id", bloom.id); | ||
| bloomUsername.setAttribute("href", `/profile/${bloom.sender}`); | ||
| bloomUsername.textContent = bloom.sender; | ||
|
|
@@ -31,6 +36,34 @@ const createBloom = (template, bloom) => { | |
| .body.childNodes | ||
| ); | ||
|
|
||
| rebloomBtn.addEventListener("click", async (e) => handleRebloomClick(e, bloom)); | ||
| // Show "originally bloomed by" | ||
| if (bloom.rebloomed_by) { | ||
| rebloomEl.replaceChildren(); | ||
|
|
||
| const originalBloomerLink = document.createElement("a"); | ||
| originalBloomerLink.href = `/profile/${bloom.rebloom_from}`; | ||
| originalBloomerLink.textContent = bloom.rebloom_from; | ||
|
|
||
| originalBloomerLink.style.fontWeight = "bold"; | ||
|
|
||
| rebloomEl.append( "Originally bloomed by ", originalBloomerLink ); | ||
| } else { | ||
| rebloomEl.hidden = true; | ||
| } | ||
|
|
||
| // Count how many times it has been rebloomed | ||
| const count = Number(bloom.rebloom_count || 0); | ||
|
|
||
| if (rebloomCount) { | ||
| if (count > 0) { | ||
| rebloomCount.hidden = false; | ||
| rebloomCount.textContent = `Rebloomed ${String(count)} times`; | ||
| } else { | ||
| rebloomCount.hidden = true; | ||
| } | ||
| } | ||
|
|
||
| return bloomFrag; | ||
| }; | ||
|
|
||
|
|
@@ -84,4 +117,26 @@ function _formatTimestamp(timestamp) { | |
| } | ||
| } | ||
|
|
||
| async function handleRebloomClick(event, bloom) { | ||
| event.preventDefault(); | ||
| const button = event.currentTarget; | ||
| const originalText = button.textContent; | ||
|
|
||
| try { | ||
| // Make button inert while calling backend | ||
| button.inert = true; | ||
| button.textContent = "Reblooming..."; | ||
|
|
||
| await apiService.postRebloom(bloom); | ||
|
|
||
| } catch (error) { | ||
| console.error("Rebloom failed:", error); | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This isn't a user-facing error - how could you surface this to a user? |
||
| } finally { | ||
| // Restore UI state | ||
| button.textContent = originalText; | ||
| button.inert = false; | ||
| } | ||
| } | ||
|
|
||
|
|
||
| export {createBloom}; | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ideally you wouldn't need to track rebloom counts in the database - there is a race condition here where values can get out of date (e.g. if you create a rebloom but haven't updated this count yet).
Instead, use SQL relationships to compute this - in a query, you should be able to compute the count of blooms which have this ID as an rebloom_from
Your Python and JS code for querying a Bloom shouldn't have to change, but it removes the need for you to update the original bloom from the python side.