feat: add bulk certify functionality to charts and dashboards
SUMMARY
This PR introduces the ability to bulk certify charts and dashboards. This feature allows users to apply certification information (certified by, certification details) to multiple resources simultaneously. Our company uses certification as a way to validate charts and dashboards before publishing. Being able to certify in bulk is very useful when users create many similar components (especially when you have thousands of charts and dashboards).
BEFORE/AFTER SCREENSHOTS OR ANIMATED GIF
TESTING INSTRUCTIONS
Select multiple charts/dashboards using bulk select and certify them. users can only certify if they have the canEdit permission.
ADDITIONAL INFORMATION
- [ ] Has associated issue:
- [ ] Required feature flags:
- [X] Changes UI
- [ ] Includes DB Migration (follow approval process in SIP-59)
- [ ] Migration is atomic, supports rollback & is backwards-compatible
- [ ] Confirm DB migration upgrade and downgrade tested
- [ ] Runtime estimates and downtime expectations provided
- [X] Introduces new feature or API
- [ ] Removes existing feature or API
awesome!
@kasiazjc to take a look at the ui change
Thanks for the PR - useful feature! And it's great to see that expanding the bulk-update functionality is pretty straightforward.
Thinking about UX/design - if/once we add a few extra bulk-action feature, it might make sense to refactor the buttons into an Action dropdown, but I think for now it's ok as is with just 3 buttons. Tagging @kasiazjc (designer) for input/feedback.
@mistercrunch good point. On that note, at GEOTAB, we also have a separate bulk update owners feature as well. This was sought after from our users as a way to transfer ownership or to share their data for collaborating. We have them separate though because the bulk update owners has a few more checks we do on our end.
Right. Parameterized bulk actions probably brings us into slightly more complex design territories. Would involve dynamic controls based on the action that is selected. Could be good to have a mock of what that would look like.
Though from my perspective the current UX (as of this PR) is "ok for now".
Could be good to have a mock of what that would look like.
Sure, let me see if i can make a separate PR for some other bulk functionalities we have
will this pr be merged in?
are we good to merge this one for now then?
Though from my perspective the current UX (as of this PR) is "ok for now".
are we good to merge this one for now then?
Though from my perspective the current UX (as of this PR) is "ok for now".
thanks @vedantprajapati and sorry for the long wait!
I think the perfect case scenario would be to combine all actions in a dropdown as we actually have 4 actions @mistercrunch:
- delete
- certify
- export
- tag (which is not really visible)
I would suggest using this component, the one with the caret down
Primary action would be export and all of the other ones would be in the dropdown menu (certify, tag, delete) and it would be displayed next to "deselect all" instead of all of the buttons.
Thoughts?
@kasiazjc okay, so for the scope of this ticket we'll just have those 4 moved to a dropdown with default being export. if @mistercrunch is okay with it, I can look into implementing this! it will definitely come in handy in the future with https://github.com/apache/superset/pull/33040
SGTM!
@mistercrunch I've made the change, tests broke because it's a UI change. Please verify and then the tests can be fixed. on another note, how can i fix https://github.com/apache/superset/actions/runs/15742296412/job/44370616138?pr=33002#step:4:4753
Just noting that this seems to need a rebase... hope it's not too bad :)
are we good to merge this one for now then?
Though from my perspective the current UX (as of this PR) is "ok for now".
thanks @vedantprajapati and sorry for the long wait!
I think the perfect case scenario would be to combine all actions in a dropdown as we actually have 4 actions @mistercrunch:
- delete
- certify
- export
- tag (which is not really visible)
I would suggest using this component, the one with the caret down
Primary action would be export and all of the other ones would be in the dropdown menu (certify, tag, delete) and it would be displayed next to "deselect all" instead of all of the buttons.
Thoughts?
Hey @kasiazjc @mistercrunch , I've added the component in superset now! let me know if this works for you and I can proceed with making the test fixes.
@mistercrunch Processing your ephemeral environment request here. Action: up. More information on how to use or configure ephemeral environments
Fired up an ephemeral environment and tagging @yousoph and @kasiazjc for user review/acceptance. Still need a code review here, let me see if I can find the time to review today.
@mistercrunch Ephemeral environment spinning up at http://35.90.255.222:8080. Credentials are 'admin'/'admin'. Please allow several minutes for bootstrapping and startup.
I think the button dropdown looks off, maybe it's not aligned?
I think the button dropdown looks off, maybe it's not aligned?
Fixed
Thanks for the contribution!
I took a look at the ephemeral env from a couple days back and I noticed that the certification doesn't always update right away after it's been applied
Here I had selected all but 2 dashboards bulk selected + certified but only one of them updates right away (before I refresh the page). I tried it with 2 charts and the page looks like it's updating but the certification icon doesn't appear.
If I refresh the page, everything works as expected but the initial state is a bit confusing
I took a look at the ephemeral env from a couple days back and I noticed that the certification doesn't always update right away after it's been applied
Hey @yousoph I'm unable to replicate this. the certification icon appears automatically when i do it.
@mistercrunch Ephemeral environment spinning up at http://35.90.255.222:8080. Credentials are 'admin'/'admin'. Please allow several minutes for bootstrapping and startup.
is it possible to respin up the environment with the latest changes?
@mistercrunch Processing your ephemeral environment request here. Action: up. More information on how to use or configure ephemeral environments
@mistercrunch Ephemeral environment spinning up at http://44.248.244.106:8080. Credentials are 'admin'/'admin'. Please allow several minutes for bootstrapping and startup.
Thanks for the contribution!
I took a look at the ephemeral env from a couple days back and I noticed that the certification doesn't always update right away after it's been applied
After looking into it a little more. it seems like I didn't notice that the refreshData() and onHide() are called before the API requests actually complete which is why it only completely updates on browser refresh. let me push a fix @yousoph
Code Review Agent Run #4f508d
Actionable Suggestions - 0
Review Details
-
Files reviewed - 1 · Commit Range:
ece3cc8..8eb6664- superset-frontend/src/components/ListView/ListView.tsx
-
Files skipped - 0
-
Tools
- Whispers (Secret Scanner) - ✔︎ Successful
- Detect-secrets (Secret Scanner) - ✔︎ Successful
Bito Usage Guide
Commands
Type the following command in the pull request comment and save the comment.
-
/review- Manually triggers a full AI review. -
/pause- Pauses automatic reviews on this pull request. -
/resume- Resumes automatic reviews. -
/resolve- Marks all Bito-posted review comments as resolved. -
/abort- Cancels all in-progress reviews.
Refer to the documentation for additional commands.
Configuration
This repository uses Default Agent You can customize the agent settings here or contact your Bito workspace admin at [email protected].
Documentation & Help
Code Review Agent Run #92311e
Actionable Suggestions - 0
Review Details
-
Files reviewed - 2 · Commit Range:
8eb6664..5cb475a- superset-frontend/src/components/ListView/ListView.tsx
- superset-frontend/src/features/bulkUpdate/BulkCertifyModal.tsx
-
Files skipped - 0
-
Tools
- Whispers (Secret Scanner) - ✔︎ Successful
- Detect-secrets (Secret Scanner) - ✔︎ Successful
Bito Usage Guide
Commands
Type the following command in the pull request comment and save the comment.
-
/review- Manually triggers a full AI review. -
/pause- Pauses automatic reviews on this pull request. -
/resume- Resumes automatic reviews. -
/resolve- Marks all Bito-posted review comments as resolved. -
/abort- Cancels all in-progress reviews.
Refer to the documentation for additional commands.
Configuration
This repository uses Default Agent You can customize the agent settings here or contact your Bito workspace admin at [email protected].
Documentation & Help
🎪 Showtime deployed environment on GHA for 0b6178d
• Environment: http://52.37.209.36:8080 (admin/admin) • Lifetime: 24h auto-cleanup • Updates: New commits create fresh environments automatically
Looks like the certification state is updating correctly now :)

