-
Notifications
You must be signed in to change notification settings - Fork 1
LPD-9465 - Allow users to save Custom Views #5216
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
base: master
Are you sure you want to change the base?
LPD-9465 - Allow users to save Custom Views #5216
Conversation
Rename Custom Views by Snapshots
…ws to avoid clashing
Prevent infinite loop when updating filters. Co-authored-by: markocikos <marko.cikos@liferay.com>
|
CI is automatically triggering the following test suites:
|
|
Test suite sf has been triggered on http://test-1-37 |
Summary of ChangesHello @juanjofgliferay, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed! This pull request significantly enhances the user experience by introducing 'Snapshots' for data sets, enabling users to save and manage their personalized view configurations. This includes persisting various display and interaction settings such as visualization modes, pagination, filters, sorting, and column visibility. The implementation involved a comprehensive overhaul of both backend and frontend components, migrating from a preference-based storage system to a more robust Object Entry API for custom views, and integrating a new Highlights
Using Gemini Code AssistThe full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips. Invoking Gemini You can request assistance from Gemini at any point by creating a comment using either
Customization To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a Limitations & Feedback Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here. You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension. Footnotes
|
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.
Code Review
This pull request introduces a significant and well-executed refactoring of the "Custom Views" feature, now termed "Snapshots". The core change is migrating the storage mechanism from Portal Preferences to a more robust Liferay Object-based solution, which is a great architectural improvement. The changes are comprehensive, spanning the backend, frontend, and tests. Key highlights include the new DataSetSnapshot object, new Vulcan REST endpoints, and a refactored frontend with improved state management using a new deepClone utility for immutability. The PR also includes valuable bug fixes for client extension loading and filter state management, and is accompanied by thorough new Playwright tests. The overall quality of the implementation is high. I have one minor suggestion to improve the serialization of snapshot data.
| ).put( | ||
| "erc", objectEntry.getExternalReferenceCode() | ||
| ).put( | ||
| "label", String.valueOf(properties.get("label")) |
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.
Using String.valueOf() on a potentially null object will result in the string literal "null". This is likely not what the frontend expects. It's better to pass the raw object from properties.get("label") to JSONUtil.put(), which will correctly serialize a null value to JSON null.
| "label", String.valueOf(properties.get("label")) | |
| "label", properties.get("label") |
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.
🤔 Not sure. I'm using the same pattern used in other FDS places
✔️ ci:test:sf - 1 out of 1 jobs passed in 5 minutesRan com.liferay.source.formatter at released version 1.0.1554. Click here for more details.Base Branch:Branch Name: master Sender Branch:Branch Name: LPD-9465.v2 1 Successful Jobs:For more details click here. |
|
Jenkins Build:test-portal-source-format#14273 Jenkins Report:jenkins-report.html Jenkins Suite:sf Pull Request:liferay-frontend#5216 Testray Routine:EE Pull Request Testray Build:[master] ci:test:sf - juanjofgliferay > liferay-frontend - PR#5216 - 2025-12-05[04:43:55] Testray Build ID: 383827777Testray Importer:test-portal-source-format#14273 |
✔️ ci:test:sf - 1 out of 1 jobs passed in 5 minutesRan com.liferay.source.formatter at released version 1.0.1554. Click here for more details.Base Branch:Branch Name: master Sender Branch:Branch Name: LPD-9465.v2 1 Successful Jobs:For more details click here. |
|
Jenkins Build:test-portal-source-format#5590 Jenkins Report:jenkins-report.html Jenkins Suite:sf Pull Request:liferay-frontend#5216 Testray Routine:EE Pull Request Testray Build:[master] ci:test:sf - juanjofgliferay > liferay-frontend - PR#5216 - 2025-12-05[10:41:30] Testray Build ID: 384081304Testray Importer:test-portal-source-format#5590 |
|
ci:test:frontend-data-set |
|
Test suite frontend-data-set has been triggered on http://test-1-36 |
|
ci:test:relevant |
|
Test suite relevant has been triggered on http://test-1-31 |
|
ci:test:stable |
|
Test suite stable has been triggered on http://test-1-31 |
❌ ci:test:frontend-data-set - 3 out of 6 jobs passed in 1 hour 17 minutesClick here for more details.Base Branch:Branch Name: master Upstream Comparison:Branch GIT ID: a163b9f2d7cc0f85f5b4a10250cedf5b739c5988 ci:test:frontend-data-set - 3 out of 6 jobs PASSED3 Failed Jobs:
3 Successful Jobs:For more details click here.Failures unique to this pull:For upstream results, click here.Test bundle downloads: |
|
Jenkins Build:test-portal-acceptance-pullrequest(master)#10081 Jenkins Report:jenkins-report.html Jenkins Suite:frontend-data-set Pull Request:liferay-frontend#5216 Testray Routine:EE Pull Request Testray Build:[master] ci:test:frontend-data-set - juanjofgliferay > liferay-frontend - PR#5216 - 2025-12-05[10:48:11] Testray Build ID: 384157877Testray Importer:test-portal-acceptance-pullrequest(master)#10081 |
✔️ ci:test:stable - 33 out of 33 jobs passed in 1 hour 20 minutesClick here for more details.Base Branch:Branch Name: master ci:test:stable - 33 out of 33 jobs PASSED33 Successful Jobs:
For more details click here.Test bundle downloads: |
|
Jenkins Build:test-portal-acceptance-pullrequest(master)#14529 Jenkins Report:jenkins-report.html Jenkins Suite:stable Pull Request:liferay-frontend#5216 Testray Routine:EE Pull Request Testray Build:[master] ci:test:stable - juanjofgliferay > liferay-frontend - PR#5216 - 2025-12-05[11:57:36] Testray Build ID: 384222878Testray Importer:test-portal-acceptance-pullrequest(master)#14529 |
✔️ ci:test:stable - 12 out of 12 jobs passed❌ ci:test:relevant - 17 out of 25 jobs passed in 2 hours 46 minutesClick here for more details.Base Branch:Branch Name: master Upstream Comparison:Branch GIT ID: f107373318f0a3024a15a3849c857a4d53259545 ci:test:stable - 12 out of 12 jobs PASSED12 Successful Jobs:ci:test:relevant - 17 out of 25 jobs PASSED8 Failed Jobs:
17 Successful Jobs:For more details click here.Failures unique to this pull:
For upstream results, click here.Test bundle downloads: |
|
Jenkins Build:test-portal-acceptance-pullrequest(master)#14528 Jenkins Report:jenkins-report.html Jenkins Suite:relevant Pull Request:liferay-frontend#5216 Testray Routine:EE Pull Request Testray Build:[master] ci:test:relevant - juanjofgliferay > liferay-frontend - PR#5216 - 2025-12-05[11:57:29] Testray Build ID: 384311741Testray Importer:test-portal-acceptance-pullrequest(master)#14528 |
Followup #5175
Story / Task
LPD-9465 / LPD-59387
Warning
In the FDS Sample Custom Views, Config in URL and Active View Settings may clash and return unexpected results.
If you want to test Custom/User Views in the FDS Sample it is better to start with a fresh DB or remove the corresponding
ActiveViewSettingsJSONrows from thePortalPreferenceValuetable.Tip
To test this feature we need to update a given Data Set and set
customViewsEnabledto true. This can be done throug API Explorer using the Data Sets API/by-external-reference-code/{externalReferenceCode}PATCH with{"snapshotsEnabled": true}body.To ease testing, it is possible to enable custom views via UI with
LPD-10683feature flag turned on.Goal
Allows end-users to create, edit and delete customized versions of admin views.
Aspects that can be saved as part of the custom view:
UI
Screencast.From.2025-11-20.13-01-15.mp4
Tests
FDS web
FDS admin web