Skip to content
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

Added keyboard support when navigating suggested usernames #1122

Conversation

balsa-asanovic
Copy link
Contributor

@balsa-asanovic balsa-asanovic commented Mar 27, 2024

Problem

In #1022 the username auto-suggest feature was introduced, but the dropdown with usernames didn't support keyboard navigation.

This PR aims to solve this, It introduces navigation with arrow keys (up and down) and sets the value on the press of Enter.

fixes #1070

Solution

Now checking for keyboard events on the username input field and on the arrow presses changing the index of the selected menu item, highlighting the appropriate one. On the press of Enter, again using the current value of index, the text input is populated with a value from the usernames array.

Testing

  • Tested manually

Screenshots

image

break;
case 'ArrowUp':
event.preventDefault(); // Prevent page scrolling
setFocusedIndex((prevIndex) => (prevIndex - 1 + suggestions.length) % suggestions.length);
Copy link
Contributor

@dgdavid dgdavid Apr 2, 2024

Choose a reason for hiding this comment

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

With this code, when pressing the Arrow Up when suggestion does not have the focus yet, the next-to-last suggestion get focused instead of the last one.

For example, having 4 suggestions (index from 0 to 3):

FirstUser.jsx:247 prevIndex: -1
FirstUser.jsx:248 suggestions.length: 4
FirstUser.jsx:249 result of (prevIndex - 1 + suggestions.length) % suggestions.length: 2

Copy link
Contributor

@dgdavid dgdavid left a comment

Choose a reason for hiding this comment

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

Ey @balsa-asanovic,

Thank you for this one. I have had a quick look and added two minor comments, but I'd like to think a about it a bit more to see if there is another approach not using these two new internal pieces of state in the component. Nothing again them, but maybe we can avoid the extra re-renders when the focused suggestion change.

Meanwhile, I think we can go ahead adding the tests for this feature because it does not depend on the implementation. Let me know if you need help with these tests.

@dgdavid

This comment was marked as off-topic.

@dgdavid

This comment was marked as resolved.

@balsa-asanovic

This comment was marked as resolved.

dgdavid

This comment was marked as resolved.

@balsa-asanovic

This comment was marked as outdated.

@dgdavid

This comment was marked as off-topic.

@balsa-asanovic

This comment was marked as outdated.

dgdavid

This comment was marked as outdated.

@balsa-asanovic
Copy link
Contributor Author

Hey @dgdavid

Addressed the comments.

Sorry for the big delay in dealing with these small issues.

Just saying, maybe there is a better, more elegant solution.

I went with the ref choice, since I didn't come up with anything better.
I am not sure here, why does it lose focus in the first place when using click action, but with the keyboard it remains.. 🤔

@dgdavid
Copy link
Contributor

dgdavid commented May 2, 2024

Hey @dgdavid

Addressed the comments.

Sorry for the big delay in dealing with these small issues.

No problem at all!

Just saying, maybe there is a better, more elegant solution.

I went with the ref choice, since I didn't come up with anything better. I am not sure here, why does it lose focus in the first place when using click action, but with the keyboard it remains.. 🤔

Honestly, I'm a bit lost with such an issue too. I have tracked it in my personal todo list in order to understand why it happens there when I've time to do so. But, unfortunately, it will have to wait.

Copy link
Contributor

@dgdavid dgdavid left a comment

Choose a reason for hiding this comment

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

@balsa-asanovic

Once more, thanks a ton!

I've fixed minor ESLint complains and... will merge as soon as everything is green in CI.

@coveralls
Copy link

coveralls commented May 2, 2024

Coverage Status

coverage: 75.077% (+0.02%) from 75.053%
when pulling 3b0ab83 on balsa-asanovic:keyboard-support-username-autosuggest
into 7e43d58 on openSUSE:master.

@dgdavid
Copy link
Contributor

dgdavid commented May 2, 2024

will merge as soon as everything is green in CI.

Ouch!

Do you mind add an entry in the changes file? Or do you prefer that I add it?

@balsa-asanovic
Copy link
Contributor Author

will merge as soon as everything is green in CI.

Ouch!

Do you mind add an entry in the changes file? Or do you prefer that I add it?

Don't mind at all, I'll add it soon.

@balsa-asanovic
Copy link
Contributor Author

@dgdavid Added entry to changes file.

@dgdavid
Copy link
Contributor

dgdavid commented May 2, 2024

Great! Thanks!

@dgdavid dgdavid merged commit 13ddc2e into agama-project:master May 2, 2024
1 check passed
@imobachgs imobachgs mentioned this pull request May 17, 2024
imobachgs added a commit that referenced this pull request May 17, 2024
Prepare for releasing Agama 8. It includes the following pull requests:

* #884
* #886
* #914
* #918
* #956
* #957
* #958
* #959
* #960
* #961
* #962
* #963
* #964
* #965
* #966
* #969
* #970
* #976
* #977
* #978
* #979
* #980
* #981
* #983
* #984
* #985
* #986
* #988
* #991
* #992
* #995
* #996
* #997
* #999
* #1003
* #1004
* #1006
* #1007
* #1008
* #1009
* #1010
* #1011
* #1012
* #1014
* #1015
* #1016
* #1017
* #1020
* #1022
* #1023
* #1024
* #1025
* #1027
* #1028
* #1029
* #1030
* #1031
* #1032
* #1033
* #1034
* #1035
* #1036
* #1038
* #1039
* #1041
* #1042
* #1043
* #1045
* #1046
* #1047
* #1048
* #1052
* #1054
* #1056
* #1057
* #1060
* #1061
* #1062
* #1063
* #1064
* #1066
* #1067
* #1068
* #1069
* #1071
* #1072
* #1073
* #1074
* #1075
* #1079
* #1080
* #1081
* #1082
* #1085
* #1086
* #1087
* #1088
* #1089
* #1090
* #1091
* #1092
* #1093
* #1094
* #1095
* #1096
* #1097
* #1098
* #1099
* #1100
* #1102
* #1103
* #1104
* #1105
* #1106
* #1109
* #1110
* #1111
* #1112
* #1114
* #1116
* #1117
* #1118
* #1119
* #1120
* #1121
* #1122
* #1123
* #1125
* #1126
* #1127
* #1128
* #1129
* #1130
* #1131
* #1132
* #1133
* #1134
* #1135
* #1136
* #1138
* #1139
* #1140
* #1141
* #1142
* #1143
* #1144
* #1145
* #1146
* #1147
* #1148
* #1149
* #1151
* #1152
* #1153
* #1154
* #1155
* #1156
* #1157
* #1158
* #1160
* #1161
* #1162
* #1163
* #1164
* #1165
* #1166
* #1167
* #1168
* #1169
* #1170
* #1171
* #1172
* #1173
* #1174
* #1175
* #1177
* #1178
* #1180
* #1181
* #1182
* #1183
* #1184
* #1185
* #1187
* #1188
* #1189
* #1190
* #1191
* #1192
* #1193
* #1194
* #1195
* #1196
* #1198
* #1199
* #1200
* #1201
* #1203
* #1204
* #1205
* #1206
* #1207
* #1208
* #1209
* #1210
* #1211
* #1212
* #1213
* #1214
* #1215
* #1216
* #1217
* #1219
* #1220
* #1221
* #1222
* #1223
* #1224
* #1225
* #1226
* #1227
* #1229
@ancorgs
Copy link
Contributor

ancorgs commented May 17, 2024

ntioned in the announcement of Agama 8.

Thanks for your contributions!

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.

Add keyboard support for auto-suggested usernames
4 participants