Skip to content

web: product selection page fixes and improvements#3039

Merged
dgdavid merged 7 commits intomasterfrom
fix-isChecked-at-product-selection
Jan 19, 2026
Merged

web: product selection page fixes and improvements#3039
dgdavid merged 7 commits intomasterfrom
fix-isChecked-at-product-selection

Conversation

@dgdavid
Copy link
Copy Markdown
Contributor

@dgdavid dgdavid commented Jan 16, 2026

Problem

On the product selection screen, the selected product can visually lose focus when the user interacts with other interactive elements on the page, such as the top-right header menu. Although the product remains selected internally, the UI no longer renders the option as selected.

This issue is caused by a combination of re-renders that recreate the available products collection and the isChecked prop comparing entire product objects instead of stable values (such as product ids). As a result, object reference changes cause the selection state to appear lost.

Solution

While the issue might have been mitigated by usage of memoization (useMemo or useCallback) somewhere, this PR addresses the root cause by comparing products using stable identifiers (id) rather than full object references, making the selection logic more robust and less error-prone.

During the work on the regression test, it became clear that the component would benefit from a broader refactor to improve maintainability and user experience. As a result, this PR goes beyond a simple hotfix and delivers a more polished version of the product selection page, including UX and visual improvements, codebase cleanup, expanded unit test coverage, and preparation for related near-term features.

Testing

  • Added new unit tests covering the regression and increasing covered behaviors
  • Manually tested the product selection flow either, in initial selection and changing the product

Screenshots

localhost_8080_ (64) localhost_8080_ (66) localhost_8080_ (65)

Use stable product identifiers in Option#isChecked to compare the
selected product with the option product, instead of comparing entire
objects whose references may change between renders.
The guard was disabled during the migration to the new API.  Now that
the migration is complete, re-enable it to prevent changing the selected
product after registration.
@dgdavid dgdavid force-pushed the fix-isChecked-at-product-selection branch from 5d89c5c to 47fbee0 Compare January 16, 2026 18:56
dgdavid and others added 2 commits January 18, 2026 22:53
Restructure the product selection page with a clearer layout, improved
visual hierarchy, and better user feedback. Product information is moved
into a dedicated card with an always-visible description and a “View
license” action. The update adds license requirement indicators, helper
text for disabled submission, dynamic submit labels, and improved
responsive behavior, while removing overly broad clickable CSS area to
allow proper interaction with nested components and better align with
web principles.

Tests are updated by removing obsolete non-revocable license cases and
adding new unit tests for increasing behavior coverage.
@dgdavid dgdavid requested a review from imobachgs January 18, 2026 23:56
@dgdavid dgdavid marked this pull request as ready for review January 19, 2026 08:42
- Drop row-gap for PF/Radio structure at ProductSelectionForm
- Make Current Selection sticky
Copy link
Copy Markdown
Contributor

@imobachgs imobachgs left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good job! I really like the new product selection page and it fixes the problems reported by QA.

@dgdavid dgdavid merged commit bd92c19 into master Jan 19, 2026
10 checks passed
@dgdavid dgdavid deleted the fix-isChecked-at-product-selection branch January 19, 2026 09:23
bmwiedemann pushed a commit to bmwiedemann/openSUSE that referenced this pull request Jan 26, 2026
https://build.opensuse.org/request/show/1328665
by user IGonzalezSosa + anag_factory
- Adapt to the changes in the question about trusting
  certificates from the registration (gh#agama-project/agama#3055).

- Update look&feel of some pages to make them match the new style
  (gh#agama-project/agama#3050).

- Avoid flicker on the product selection page by deferring the
  display of current product information
  (gh#agama-project/agama#3049).

- Internal fix to prevent warnings (not visible for users) in the
  product selection form (gh#agama-project/agama#3048).

- Fix query refetch (gh#agama-project/agama#3044).

- Avoid flickering on the overview page by stabilizing progress
  updates (gh#agama-project/agama#3042).

- Enhance product selection page (gh#agama-project/agama#3039):
  - Keep the selected product’s radio button checked after
    interacting with other controls.
@imobachgs imobachgs mentioned this pull request Mar 17, 2026
imobachgs added a commit that referenced this pull request Mar 17, 2026
Prepare to release version 19.

* #1829
* #2508
* #2772
* #2818
* #2826
* #2848
* #2860
* #2863
* #2864
* #2866
* #2867
* #2869
* #2870
* #2871
* #2872
* #2873
* #2874
* #2875
* #2876
* #2877
* #2880
* #2881
* #2882
* #2884
* #2885
* #2886
* #2891
* #2892
* #2893
* #2894
* #2895
* #2896
* #2897
* #2898
* #2899
* #2900
* #2901
* #2902
* #2903
* #2904
* #2908
* #2909
* #2910
* #2912
* #2913
* #2914
* #2915
* #2916
* #2917
* #2918
* #2920
* #2921
* #2923
* #2924
* #2926
* #2928
* #2929
* #2930
* #2933
* #2934
* #2935
* #2936
* #2937
* #2938
* #2939
* #2942
* #2943
* #2944
* #2945
* #2946
* #2947
* #2948
* #2949
* #2950
* #2951
* #2952
* #2954
* #2955
* #2956
* #2957
* #2958
* #2959
* #2960
* #2961
* #2963
* #2964
* #2965
* #2967
* #2968
* #2969
* #2970
* #2971
* #2972
* #2974
* #2975
* #2977
* #2978
* #2980
* #2981
* #2982
* #2983
* #2984
* #2988
* #2989
* #2990
* #2991
* #2992
* #2993
* #2994
* #2995
* #2996
* #2997
* #2998
* #2999
* #3000
* #3001
* #3002
* #3004
* #3005
* #3006
* #3007
* #3008
* #3009
* #3011
* #3012
* #3013
* #3014
* #3015
* #3016
* #3018
* #3019
* #3020
* #3021
* #3022
* #3023
* #3024
* #3025
* #3026
* #3027
* #3028
* #3029
* #3030
* #3031
* #3033
* #3034
* #3035
* #3036
* #3037
* #3039
* #3040
* #3041
* #3042
* #3043
* #3044
* #3045
* #3046
* #3047
* #3048
* #3049
* #3050
* #3051
* #3052
* #3053
* #3054
* #3055
* #3056
* #3057
* #3058
* #3060
* #3061
* #3062
* #3063
* #3064
* #3065
* #3066
* #3067
* #3068
* #3069
* #3070
* #3071
* #3072
* #3073
* #3074
* #3075
* #3076
* #3077
* #3078
* #3079
* #3086
* #3087
* #3088
* #3089
* #3090
* #3091
* #3092
* #3093
* #3094
* #3095
* #3096
* #3097
* #3098
* #3099
* #3100
* #3101
* #3102
* #3103
* #3104
* #3105
* #3106
* #3107
* #3108
* #3109
* #3110
* #3112
* #3113
* #3114
* #3115
* #3116
* #3117
* #3118
* #3119
* #3120
* #3122
* #3123
* #3124
* #3127
* #3128
* #3129
* #3130
* #3131
* #3133
* #3134
* #3135
* #3136
* #3137
* #3138
* #3139
* #3140
* #3141
* #3142
* #3143
* #3144
* #3145
* #3146
* #3147
* #3148
* #3149
* #3150
* #3151
* #3152
* #3153
* #3154
* #3155
* #3157
* #3158
* #3159
* #3160
* #3161
* #3162
* #3163
* #3164
* #3165
* #3166
* #3167
* #3168
* #3169
* #3170
* #3174
* #3175
* #3176
* #3177
* #3178
* #3179
* #3181
* #3182
* #3184
* #3185
* #3186
* #3188
* #3189
* #3190
* #3191
* #3192
* #3194
* #3195
* #3196
* #3197
* #3198
* #3199
* #3200
* #3201
* #3202
* #3203
* #3205
* #3206
* #3208
* #3209
* #3210
* #3213
* #3214
* #3215
* #3216
* #3217
* #3218
* #3219
* #3220
* #3222
* #3223
* #3224
* #3225
* #3226
* #3227
* #3228
* #3229
* #3230
* #3231
* #3232
* #3233
* #3234
* #3235
* #3236
* #3237
* #3238
* #3239
* #3240
* #3241
* #3242
* #3243
* #3244
* #3246
* #3247
* #3248
* #3250
* #3251
* #3252
* #3253
* #3254
* #3255
* #3256
* #3257
* #3258
* #3259
* #3260
* #3261
* #3262
* #3263
* #3265
* #3266
* #3267
* #3268
* #3269
* #3270
* #3271
* #3272
* #3273
* #3274
* #3275
* #3276
* #3277
* #3278
* #3279
* #3280
* #3281
* #3282
* #3283
* #3284
* #3285
* #3286
* #3287
* #3288
* #3289
* #3290
* #3291
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants