diff --git a/app/mobile/src/access/create/Create.jsx b/app/mobile/src/access/create/Create.jsx
index 92efebcf..897b8db7 100644
--- a/app/mobile/src/access/create/Create.jsx
+++ b/app/mobile/src/access/create/Create.jsx
@@ -144,8 +144,8 @@ export function Create() {
Create
)}
-
- Account Login
+
+ Account Login
diff --git a/app/mobile/src/access/create/useCreate.hook.js b/app/mobile/src/access/create/useCreate.hook.js
index 3d7643b4..b52c5491 100644
--- a/app/mobile/src/access/create/useCreate.hook.js
+++ b/app/mobile/src/access/create/useCreate.hook.js
@@ -7,6 +7,7 @@ import { getUsername } from 'api/getUsername';
export function useCreate() {
+ const [count, setCount] = useState(0);
const navigate = useNavigate();
const app = useContext(AppContext);
@@ -29,6 +30,8 @@ export function useCreate() {
usernameValid: false,
});
+ const backoff = useRef(false);
+ const checking = useRef(false);
const debounce = useRef(null);
const updateState = (value) => {
@@ -51,19 +54,23 @@ export function useCreate() {
}
}, [state]);
- const check = (server, token, username) => {
+ useEffect(() => {
+ if (checking.current) {
+ backoff.current = true;
+ }
if (debounce.current) {
clearTimeout(debounce.current);
}
debounce.current = setTimeout(async () => {
+ checking.current = true;
debounce.current = null;
- if (server) {
+ if (state.server) {
try {
- const available = await getAvailable(server);
+ const available = await getAvailable(state.server);
if (available) {
- if (username) {
+ if (state.username) {
try {
- const claimable = await getUsername(username, server, null);
+ const claimable = await getUsername(state.username, state.server, null);
updateState({ usernameChecked: true, tokenChecked: true, serverChecked: true, tokenRequired: false,
usernameValid: claimable, serverValid: true });
}
@@ -78,13 +85,13 @@ export function useCreate() {
}
}
else {
- if (token) {
+ if (state.token) {
try {
- const accessible = await getUsername(null, server, token);
+ const accessible = await getUsername(null, state.server, state.token);
if (accessible) {
- if (username) {
+ if (state.username) {
try {
- const claimable = await getUsername(username, server, token);
+ const claimable = await getUsername(state.username, state.server, state.token);
updateState({ usernameChecked: true, tokenChecked: true, serverChecked: true, tokenRequired: true,
usernameValid: claimable, tokenValid: true, serverValid: true });
}
@@ -118,8 +125,14 @@ export function useCreate() {
updateState({ usernameChecked: true, tokenChecked: true, serverChecked: true, serverValid: false });
}
}
+ let retry = backoff.current;
+ backoff.current = false;
+ checking.current = false;
+ if (retry) {
+ setCount(count++);
+ }
}, 1000);
- }
+ }, [count]);
const actions = {
config: () => {
@@ -127,15 +140,15 @@ export function useCreate() {
},
setServer: (server) => {
updateState({ server, serverChecked: false });
- check(server, state.token, state.username);
+ setCount(count+1);
},
setToken: (token) => {
updateState({ token, tokenChecked: false });
- check(state.server, token, state.username);
+ setCount(count+1);
},
setUsername: (username) => {
updateState({ username, usernameChecked: false });
- check(state.server, state.token, username);
+ setCount(count+1);
},
setPassword: (password) => {
updateState({ password });