-
Notifications
You must be signed in to change notification settings - Fork 41
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
Added keyboard support when navigating suggested usernames #1122
Conversation
break; | ||
case 'ArrowUp': | ||
event.preventDefault(); // Prevent page scrolling | ||
setFocusedIndex((prevIndex) => (prevIndex - 1 + suggestions.length) % suggestions.length); |
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.
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
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.
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.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as resolved.
This comment was marked as resolved.
This fixes the issue, as it doesn't substract -1 when starting with arrow up
This comment was marked as resolved.
This comment was marked as resolved.
This comment was marked as outdated.
This comment was marked as outdated.
This comment was marked as off-topic.
This comment was marked as off-topic.
This comment was marked as outdated.
This comment was marked as outdated.
Hey @dgdavid Addressed the comments. Sorry for the big delay in dealing with these small issues.
I went with the ref choice, since I didn't come up with anything better. |
No problem at all!
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. |
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.
Once more, thanks a ton!
I've fixed minor ESLint complains and... 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. |
@dgdavid Added entry to changes file. |
Great! Thanks! |
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
ntioned in the announcement of Agama 8. Thanks for your contributions! |
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
Screenshots