Skip to content

Fix product and patterns selection#2946

Merged
imobachgs merged 20 commits intoapi-v2from
fix-product-selection
Dec 17, 2025
Merged

Fix product and patterns selection#2946
imobachgs merged 20 commits intoapi-v2from
fix-product-selection

Conversation

@imobachgs
Copy link
Copy Markdown
Contributor

@imobachgs imobachgs commented Dec 16, 2025

Problem

  • After selecting the product to install, the web user interface does not navigate to the overview page.
  • The patterns selection is not working.

Solution

  • Adapt the product selector to navigate once the user picks a product.
  • Fix the software overview and its main page to work with the new API.
  • Fix the patterns selection page.

Changes to the backend

The backend did not allow to explicitly remove a package. In the old version of Agama, that information was in libzypp only. We needed to extend the backend to support this case too.

However, two more things are missing:

  • Exposing whether a resolvable was explictly removed by the user (we need to extend the bindings for that).
  • Check why it is not possible to unselect a recommended dependency.

Both issues can be fixed later.

Testing

  • Added a new unit test
  • Tested manually

Follow-up

  • Clean the old software types.

@imobachgs imobachgs force-pushed the fix-product-selection branch from e67b2eb to e708da6 Compare December 16, 2025 07:55
@imobachgs imobachgs marked this pull request as ready for review December 16, 2025 08:58
Copy link
Copy Markdown
Contributor

@teclator teclator left a comment

Choose a reason for hiding this comment

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

LGTM

@imobachgs imobachgs force-pushed the fix-product-selection branch 4 times, most recently from 3e58f59 to 813126d Compare December 17, 2025 16:06
* Unselecting an auto-selected pattern does not seem to work.
@imobachgs imobachgs force-pushed the fix-product-selection branch from 813126d to 29eaf28 Compare December 17, 2025 16:12
utoipa::ToSchema,
PartialEq,
Eq,
Hash,
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

NP: I prefer to have entries alphabetically ordered, as it is easier to read. I would apply it to all parts that do not depend on order.


/// Turns the list of resolvables into a vector.
///
/// FIXME: return an interator instead.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

👍 as probably hash set is not needed. I kind of expect that common Vector will be enough.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

A HashSet is used in the tests to make things easier. We could use a Vec but you need to ensure the order (using the name and the type, for instance).

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

well, in general I would try to not affect production code by tests...having ordered Vec is ok for me. If HashSet is needed only in test, then test should construct it from vector.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Well, I do not have a strong opinion about that, if the API can be improved and used in tests, it is fine. For instance, we do it for instance everytime we implement PartialEq or Eq for tests.

Anyway, I am using a Vec now.

let result = zypp.select_resolvable(name, r#type.into(), reason);

if let Err(error) = result {
if optional {
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

well, it can cloak real errors. Ideally we should for optional at first ask if resolvable is available ( not available now in agama-zypp ) and skip if not.

so ideally something like

if optional && !zypp.resolvable_available(name, r#typ.into()) {
  return issues;
}


if (product?.id === undefined && !isBusy && location.pathname !== PRODUCT.root) {
console.log("Navigating to the product selection page");
return <Navigate to={PRODUCT.root} />;
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Why it can be removed? where redirect to product selection happen?

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

ah, it is below in overview page. Not sure which location I like more.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I will discuss with David. Anyway, we want to stop using App as a "router". Most probably the redirection should be in the router itself, but I do not think we are at that point.

export type { Proposal, PatternsSelection, SelectedBy };
export type { Proposal, PatternsSelection };

export { SelectedBy };
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

why now enum is no longer exported as type?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

I would say export type is just for types. I tried and it works just fine.

@imobachgs imobachgs merged commit 8a00b06 into api-v2 Dec 17, 2025
17 of 18 checks passed
@imobachgs imobachgs deleted the fix-product-selection branch December 17, 2025 22:20
teclator added a commit that referenced this pull request Dec 24, 2025
## Problem

Agama allows to set the hostname during the installation. We need to
expose this functionality using the new API and adapt the UI
accordingly.

-
https://trello.com/c/tuQh4U24/5445-adapt-the-hostname-api-to-the-new-approach

## Solution

Added hostname service to the backend. The UI has been adapted allowing
to set the hostname using the new API but the registration check is
missing because product registration is still not adapted in the UI (see
#2946 for example).

## Todo

- [X] New hostname service is defined
- [x] UI is adapted (registration check is pending until implemented)

## Testing

- *Tested manually*
imobachgs added a commit that referenced this pull request Jan 10, 2026
Merge the new HTTP API. Each PR has been already reviewed, so it should
be safe to merge it.

* #1829
* #2508
* #2772
* #2826
* #2848
* #2860
* #2863
* #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
* #2938
* #2939
* #2942
* #2943
* #2944
* #2945
* #2946
* #2947
* #2948
* #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
* #2982
* #2983
* #2984
* #2988
* #2989
* #2991
* #2992
* #2993
* #2994
* #2995
* #2996
* #2997
* #2999
@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.

3 participants