Always display reset modal on success
This commit is contained in:
parent
cecd10da34
commit
9a50eb8663
9 changed files with 26 additions and 82 deletions
|
@ -44,9 +44,6 @@ export default {
|
||||||
usernameLinkCorrupted: {
|
usernameLinkCorrupted: {
|
||||||
control: 'boolean',
|
control: 'boolean',
|
||||||
},
|
},
|
||||||
usernameLinkRecovered: {
|
|
||||||
control: 'boolean',
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
args: {
|
args: {
|
||||||
aboutEmoji: '',
|
aboutEmoji: '',
|
||||||
|
@ -77,7 +74,6 @@ export default {
|
||||||
showToast: action('showToast'),
|
showToast: action('showToast'),
|
||||||
replaceAvatar: action('replaceAvatar'),
|
replaceAvatar: action('replaceAvatar'),
|
||||||
resetUsernameLink: action('resetUsernameLink'),
|
resetUsernameLink: action('resetUsernameLink'),
|
||||||
clearUsernameLinkRecovered: action('clearUsernameLinkRecovered'),
|
|
||||||
saveAvatarToDisk: action('saveAvatarToDisk'),
|
saveAvatarToDisk: action('saveAvatarToDisk'),
|
||||||
markCompletedUsernameLinkOnboarding: action(
|
markCompletedUsernameLinkOnboarding: action(
|
||||||
'markCompletedUsernameLinkOnboarding'
|
'markCompletedUsernameLinkOnboarding'
|
||||||
|
|
|
@ -82,7 +82,6 @@ export type PropsDataType = {
|
||||||
initialEditState?: EditState;
|
initialEditState?: EditState;
|
||||||
usernameCorrupted: boolean;
|
usernameCorrupted: boolean;
|
||||||
usernameEditState: UsernameEditState;
|
usernameEditState: UsernameEditState;
|
||||||
usernameLinkRecovered: boolean;
|
|
||||||
usernameLinkState: UsernameLinkState;
|
usernameLinkState: UsernameLinkState;
|
||||||
usernameLinkColor?: number;
|
usernameLinkColor?: number;
|
||||||
usernameLink?: string;
|
usernameLink?: string;
|
||||||
|
@ -100,7 +99,6 @@ type PropsActionType = {
|
||||||
setUsernameLinkColor: (color: number) => void;
|
setUsernameLinkColor: (color: number) => void;
|
||||||
toggleProfileEditor: () => void;
|
toggleProfileEditor: () => void;
|
||||||
resetUsernameLink: () => void;
|
resetUsernameLink: () => void;
|
||||||
clearUsernameLinkRecovered: () => void;
|
|
||||||
deleteUsername: () => void;
|
deleteUsername: () => void;
|
||||||
showToast: ShowToastAction;
|
showToast: ShowToastAction;
|
||||||
openUsernameReservationModal: () => void;
|
openUsernameReservationModal: () => void;
|
||||||
|
@ -141,7 +139,6 @@ function getDefaultBios(i18n: LocalizerType): Array<DefaultBio> {
|
||||||
export function ProfileEditor({
|
export function ProfileEditor({
|
||||||
aboutEmoji,
|
aboutEmoji,
|
||||||
aboutText,
|
aboutText,
|
||||||
clearUsernameLinkRecovered,
|
|
||||||
color,
|
color,
|
||||||
conversationId,
|
conversationId,
|
||||||
deleteAvatarFromDisk,
|
deleteAvatarFromDisk,
|
||||||
|
@ -172,7 +169,6 @@ export function ProfileEditor({
|
||||||
username,
|
username,
|
||||||
usernameCorrupted,
|
usernameCorrupted,
|
||||||
usernameEditState,
|
usernameEditState,
|
||||||
usernameLinkRecovered,
|
|
||||||
usernameLinkState,
|
usernameLinkState,
|
||||||
usernameLinkColor,
|
usernameLinkColor,
|
||||||
usernameLink,
|
usernameLink,
|
||||||
|
@ -535,11 +531,9 @@ export function ProfileEditor({
|
||||||
username={username ?? ''}
|
username={username ?? ''}
|
||||||
colorId={usernameLinkColor}
|
colorId={usernameLinkColor}
|
||||||
usernameLinkCorrupted={usernameLinkCorrupted}
|
usernameLinkCorrupted={usernameLinkCorrupted}
|
||||||
usernameLinkRecovered={usernameLinkRecovered}
|
|
||||||
usernameLinkState={usernameLinkState}
|
usernameLinkState={usernameLinkState}
|
||||||
setUsernameLinkColor={setUsernameLinkColor}
|
setUsernameLinkColor={setUsernameLinkColor}
|
||||||
resetUsernameLink={resetUsernameLink}
|
resetUsernameLink={resetUsernameLink}
|
||||||
clearUsernameLinkRecovered={clearUsernameLinkRecovered}
|
|
||||||
saveAttachment={saveAttachment}
|
saveAttachment={saveAttachment}
|
||||||
showToast={showToast}
|
showToast={showToast}
|
||||||
onBack={() => setEditState(EditState.None)}
|
onBack={() => setEditState(EditState.None)}
|
||||||
|
|
|
@ -35,9 +35,6 @@ export default {
|
||||||
usernameLinkCorrupted: {
|
usernameLinkCorrupted: {
|
||||||
control: 'boolean',
|
control: 'boolean',
|
||||||
},
|
},
|
||||||
usernameLinkRecovered: {
|
|
||||||
control: 'boolean',
|
|
||||||
},
|
|
||||||
usernameLinkState: {
|
usernameLinkState: {
|
||||||
control: { type: 'select' },
|
control: { type: 'select' },
|
||||||
options: [
|
options: [
|
||||||
|
@ -69,7 +66,6 @@ export default {
|
||||||
showToast: action('showToast'),
|
showToast: action('showToast'),
|
||||||
resetUsernameLink: action('resetUsernameLink'),
|
resetUsernameLink: action('resetUsernameLink'),
|
||||||
setUsernameLinkColor: action('setUsernameLinkColor'),
|
setUsernameLinkColor: action('setUsernameLinkColor'),
|
||||||
clearUsernameLinkRecovered: action('clearUsernameLinkRecovered'),
|
|
||||||
onBack: action('onBack'),
|
onBack: action('onBack'),
|
||||||
},
|
},
|
||||||
} satisfies Meta<PropsType>;
|
} satisfies Meta<PropsType>;
|
||||||
|
|
|
@ -29,11 +29,9 @@ export type PropsType = Readonly<{
|
||||||
colorId?: number;
|
colorId?: number;
|
||||||
usernameLinkCorrupted: boolean;
|
usernameLinkCorrupted: boolean;
|
||||||
usernameLinkState: UsernameLinkState;
|
usernameLinkState: UsernameLinkState;
|
||||||
usernameLinkRecovered: boolean;
|
|
||||||
|
|
||||||
setUsernameLinkColor: (colorId: number) => void;
|
setUsernameLinkColor: (colorId: number) => void;
|
||||||
resetUsernameLink: () => void;
|
resetUsernameLink: () => void;
|
||||||
clearUsernameLinkRecovered: () => void;
|
|
||||||
saveAttachment: SaveAttachmentActionCreatorType;
|
saveAttachment: SaveAttachmentActionCreatorType;
|
||||||
showToast: ShowToastAction;
|
showToast: ShowToastAction;
|
||||||
onBack: () => void;
|
onBack: () => void;
|
||||||
|
@ -528,18 +526,22 @@ function UsernameLinkColors({
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum ResetModalVisibility {
|
||||||
|
NotMounted = 'NotMounted',
|
||||||
|
Closed = 'Closed',
|
||||||
|
Open = 'Open',
|
||||||
|
}
|
||||||
|
|
||||||
export function UsernameLinkModalBody({
|
export function UsernameLinkModalBody({
|
||||||
i18n,
|
i18n,
|
||||||
link,
|
link,
|
||||||
username,
|
username,
|
||||||
usernameLinkCorrupted,
|
usernameLinkCorrupted,
|
||||||
usernameLinkState,
|
usernameLinkState,
|
||||||
usernameLinkRecovered,
|
|
||||||
colorId: initialColorId = ColorEnum.UNKNOWN,
|
colorId: initialColorId = ColorEnum.UNKNOWN,
|
||||||
|
|
||||||
setUsernameLinkColor,
|
setUsernameLinkColor,
|
||||||
resetUsernameLink,
|
resetUsernameLink,
|
||||||
clearUsernameLinkRecovered,
|
|
||||||
saveAttachment,
|
saveAttachment,
|
||||||
showToast,
|
showToast,
|
||||||
|
|
||||||
|
@ -548,7 +550,9 @@ export function UsernameLinkModalBody({
|
||||||
const [pngData, setPngData] = useState<Uint8Array | undefined>();
|
const [pngData, setPngData] = useState<Uint8Array | undefined>();
|
||||||
const [showColors, setShowColors] = useState(false);
|
const [showColors, setShowColors] = useState(false);
|
||||||
const [confirmReset, setConfirmReset] = useState(false);
|
const [confirmReset, setConfirmReset] = useState(false);
|
||||||
const [isRecovered, setIsRecovered] = useState(false);
|
const [resetModalVisibility, setResetModalVisibility] = useState(
|
||||||
|
ResetModalVisibility.NotMounted
|
||||||
|
);
|
||||||
const [showError, setShowError] = useState(false);
|
const [showError, setShowError] = useState(false);
|
||||||
const [colorId, setColorId] = useState(initialColorId);
|
const [colorId, setColorId] = useState(initialColorId);
|
||||||
|
|
||||||
|
@ -694,22 +698,24 @@ export function UsernameLinkModalBody({
|
||||||
setShowError(true);
|
setShowError(true);
|
||||||
}, [usernameLinkState]);
|
}, [usernameLinkState]);
|
||||||
|
|
||||||
useEffect(() => {
|
const onResetModalClose = useCallback(() => {
|
||||||
if (usernameLinkRecovered) {
|
setResetModalVisibility(ResetModalVisibility.Closed);
|
||||||
setIsRecovered(true);
|
|
||||||
|
|
||||||
// Only show the modal once
|
|
||||||
clearUsernameLinkRecovered();
|
|
||||||
}
|
|
||||||
}, [usernameLinkRecovered, clearUsernameLinkRecovered]);
|
|
||||||
|
|
||||||
const onClearIsRecovered = useCallback(() => {
|
|
||||||
setIsRecovered(false);
|
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const isReady = usernameLinkState === UsernameLinkState.Ready;
|
const isReady = usernameLinkState === UsernameLinkState.Ready;
|
||||||
const isResettingLink = usernameLinkCorrupted || !isReady;
|
const isResettingLink = usernameLinkCorrupted || !isReady;
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setResetModalVisibility(x => {
|
||||||
|
// Initial mount shouldn't show the modal
|
||||||
|
if (x === ResetModalVisibility.NotMounted || isResettingLink) {
|
||||||
|
return ResetModalVisibility.Closed;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ResetModalVisibility.Open;
|
||||||
|
});
|
||||||
|
}, [isResettingLink]);
|
||||||
|
|
||||||
const info = (
|
const info = (
|
||||||
<>
|
<>
|
||||||
<div className={classnames(`${CLASS}__actions`)}>
|
<div className={classnames(`${CLASS}__actions`)}>
|
||||||
|
@ -862,11 +868,11 @@ export function UsernameLinkModalBody({
|
||||||
</ConfirmationDialog>
|
</ConfirmationDialog>
|
||||||
)}
|
)}
|
||||||
|
|
||||||
{isRecovered && (
|
{resetModalVisibility === ResetModalVisibility.Open && (
|
||||||
<ConfirmationDialog
|
<ConfirmationDialog
|
||||||
i18n={i18n}
|
i18n={i18n}
|
||||||
dialogName="UsernameLinkModal__error"
|
dialogName="UsernameLinkModal__error"
|
||||||
onClose={onClearIsRecovered}
|
onClose={onResetModalClose}
|
||||||
cancelButtonVariant={ButtonVariant.Secondary}
|
cancelButtonVariant={ButtonVariant.Secondary}
|
||||||
cancelText={i18n('icu:ok')}
|
cancelText={i18n('icu:ok')}
|
||||||
>
|
>
|
||||||
|
|
|
@ -16,7 +16,6 @@ import type { UsernameReservationType } from '../types/Username';
|
||||||
import {
|
import {
|
||||||
ReserveUsernameError,
|
ReserveUsernameError,
|
||||||
ConfirmUsernameResult,
|
ConfirmUsernameResult,
|
||||||
ResetUsernameLinkResult,
|
|
||||||
getNickname,
|
getNickname,
|
||||||
getDiscriminator,
|
getDiscriminator,
|
||||||
isCaseChange,
|
isCaseChange,
|
||||||
|
@ -334,9 +333,7 @@ export async function deleteUsername(
|
||||||
await updateUsernameAndSyncProfile(undefined);
|
await updateUsernameAndSyncProfile(undefined);
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function resetLink(
|
export async function resetLink(username: string): Promise<void> {
|
||||||
username: string
|
|
||||||
): Promise<ResetUsernameLinkResult> {
|
|
||||||
const { server } = window.textsecure;
|
const { server } = window.textsecure;
|
||||||
if (!server) {
|
if (!server) {
|
||||||
throw new Error('server interface is not available!');
|
throw new Error('server interface is not available!');
|
||||||
|
@ -350,8 +347,6 @@ export async function resetLink(
|
||||||
|
|
||||||
const { entropy, encryptedUsername } = usernames.createUsernameLink(username);
|
const { entropy, encryptedUsername } = usernames.createUsernameLink(username);
|
||||||
|
|
||||||
const wasCorrupted = window.storage.get('usernameLinkCorrupted');
|
|
||||||
|
|
||||||
await window.storage.remove('usernameLink');
|
await window.storage.remove('usernameLink');
|
||||||
|
|
||||||
const { usernameLinkHandle: serverIdString } =
|
const { usernameLinkHandle: serverIdString } =
|
||||||
|
@ -368,10 +363,6 @@ export async function resetLink(
|
||||||
|
|
||||||
me.captureChange('usernameLink');
|
me.captureChange('usernameLink');
|
||||||
storageServiceUploadJob();
|
storageServiceUploadJob();
|
||||||
|
|
||||||
return wasCorrupted
|
|
||||||
? ResetUsernameLinkResult.OkRecovered
|
|
||||||
: ResetUsernameLinkResult.Ok;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const USERNAME_LINK_ENTROPY_SIZE = 32;
|
const USERNAME_LINK_ENTROPY_SIZE = 32;
|
||||||
|
|
|
@ -8,7 +8,6 @@ import type { UsernameReservationType } from '../../types/Username';
|
||||||
import {
|
import {
|
||||||
ReserveUsernameError,
|
ReserveUsernameError,
|
||||||
ConfirmUsernameResult,
|
ConfirmUsernameResult,
|
||||||
ResetUsernameLinkResult,
|
|
||||||
} from '../../types/Username';
|
} from '../../types/Username';
|
||||||
import * as usernameServices from '../../services/username';
|
import * as usernameServices from '../../services/username';
|
||||||
import { storageServiceUploadJob } from '../../services/storage';
|
import { storageServiceUploadJob } from '../../services/storage';
|
||||||
|
@ -46,7 +45,6 @@ export type UsernameStateType = ReadonlyDeep<{
|
||||||
|
|
||||||
// UsernameLinkModalBody
|
// UsernameLinkModalBody
|
||||||
linkState: UsernameLinkState;
|
linkState: UsernameLinkState;
|
||||||
linkRecovered: boolean;
|
|
||||||
|
|
||||||
// EditUsernameModalBody
|
// EditUsernameModalBody
|
||||||
usernameReservation: UsernameReservationStateType;
|
usernameReservation: UsernameReservationStateType;
|
||||||
|
@ -63,7 +61,6 @@ const RESERVE_USERNAME = 'username/RESERVE_USERNAME';
|
||||||
const CONFIRM_USERNAME = 'username/CONFIRM_USERNAME';
|
const CONFIRM_USERNAME = 'username/CONFIRM_USERNAME';
|
||||||
const DELETE_USERNAME = 'username/DELETE_USERNAME';
|
const DELETE_USERNAME = 'username/DELETE_USERNAME';
|
||||||
const RESET_USERNAME_LINK = 'username/RESET_USERNAME_LINK';
|
const RESET_USERNAME_LINK = 'username/RESET_USERNAME_LINK';
|
||||||
const CLEAR_USERNAME_LINK_RECOVERED = 'username/CLEAR_USERNAME_LINK_RECOVERED';
|
|
||||||
|
|
||||||
type SetUsernameEditStateActionType = ReadonlyDeep<{
|
type SetUsernameEditStateActionType = ReadonlyDeep<{
|
||||||
type: typeof SET_USERNAME_EDIT_STATE;
|
type: typeof SET_USERNAME_EDIT_STATE;
|
||||||
|
@ -105,11 +102,8 @@ type DeleteUsernameActionType = ReadonlyDeep<
|
||||||
PromiseAction<typeof DELETE_USERNAME, void>
|
PromiseAction<typeof DELETE_USERNAME, void>
|
||||||
>;
|
>;
|
||||||
type ResetUsernameLinkActionType = ReadonlyDeep<
|
type ResetUsernameLinkActionType = ReadonlyDeep<
|
||||||
PromiseAction<typeof RESET_USERNAME_LINK, ResetUsernameLinkResult>
|
PromiseAction<typeof RESET_USERNAME_LINK, void>
|
||||||
>;
|
>;
|
||||||
type ClearUsernameLinkRecoveredActionType = ReadonlyDeep<{
|
|
||||||
type: typeof CLEAR_USERNAME_LINK_RECOVERED;
|
|
||||||
}>;
|
|
||||||
|
|
||||||
export type UsernameActionType = ReadonlyDeep<
|
export type UsernameActionType = ReadonlyDeep<
|
||||||
| SetUsernameEditStateActionType
|
| SetUsernameEditStateActionType
|
||||||
|
@ -121,7 +115,6 @@ export type UsernameActionType = ReadonlyDeep<
|
||||||
| ConfirmUsernameActionType
|
| ConfirmUsernameActionType
|
||||||
| DeleteUsernameActionType
|
| DeleteUsernameActionType
|
||||||
| ResetUsernameLinkActionType
|
| ResetUsernameLinkActionType
|
||||||
| ClearUsernameLinkRecoveredActionType
|
|
||||||
>;
|
>;
|
||||||
|
|
||||||
export const actions = {
|
export const actions = {
|
||||||
|
@ -135,7 +128,6 @@ export const actions = {
|
||||||
deleteUsername,
|
deleteUsername,
|
||||||
markCompletedUsernameOnboarding,
|
markCompletedUsernameOnboarding,
|
||||||
resetUsernameLink,
|
resetUsernameLink,
|
||||||
clearUsernameLinkRecovered,
|
|
||||||
setUsernameLinkColor,
|
setUsernameLinkColor,
|
||||||
markCompletedUsernameLinkOnboarding,
|
markCompletedUsernameLinkOnboarding,
|
||||||
};
|
};
|
||||||
|
@ -361,19 +353,12 @@ function setUsernameLinkColor(
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function clearUsernameLinkRecovered(): ClearUsernameLinkRecoveredActionType {
|
|
||||||
return {
|
|
||||||
type: CLEAR_USERNAME_LINK_RECOVERED,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
// Reducers
|
// Reducers
|
||||||
|
|
||||||
export function getEmptyState(): UsernameStateType {
|
export function getEmptyState(): UsernameStateType {
|
||||||
return {
|
return {
|
||||||
editState: UsernameEditState.Editing,
|
editState: UsernameEditState.Editing,
|
||||||
linkState: UsernameLinkState.Ready,
|
linkState: UsernameLinkState.Ready,
|
||||||
linkRecovered: false,
|
|
||||||
usernameReservation: {
|
usernameReservation: {
|
||||||
state: UsernameReservationState.Closed,
|
state: UsernameReservationState.Closed,
|
||||||
},
|
},
|
||||||
|
@ -629,16 +614,13 @@ export function reducer(
|
||||||
return {
|
return {
|
||||||
...state,
|
...state,
|
||||||
linkState: UsernameLinkState.Updating,
|
linkState: UsernameLinkState.Updating,
|
||||||
linkRecovered: false,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
if (action.type === 'username/RESET_USERNAME_LINK_FULFILLED') {
|
if (action.type === 'username/RESET_USERNAME_LINK_FULFILLED') {
|
||||||
const { payload } = action;
|
|
||||||
return {
|
return {
|
||||||
...state,
|
...state,
|
||||||
linkState: UsernameLinkState.Ready,
|
linkState: UsernameLinkState.Ready,
|
||||||
linkRecovered: payload === ResetUsernameLinkResult.OkRecovered,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -646,14 +628,6 @@ export function reducer(
|
||||||
return {
|
return {
|
||||||
...state,
|
...state,
|
||||||
linkState: UsernameLinkState.Error,
|
linkState: UsernameLinkState.Error,
|
||||||
linkRecovered: false,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
if (action.type === 'username/CLEAR_USERNAME_LINK_RECOVERED') {
|
|
||||||
return {
|
|
||||||
...state,
|
|
||||||
linkRecovered: false,
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,11 +29,6 @@ export const getUsernameLinkState = createSelector(
|
||||||
(state: UsernameStateType): UsernameLinkState => state.linkState
|
(state: UsernameStateType): UsernameLinkState => state.linkState
|
||||||
);
|
);
|
||||||
|
|
||||||
export const getUsernameLinkRecovered = createSelector(
|
|
||||||
getUsernameState,
|
|
||||||
(state: UsernameStateType): boolean => state.linkRecovered
|
|
||||||
);
|
|
||||||
|
|
||||||
export const getUsernameReservation = createSelector(
|
export const getUsernameReservation = createSelector(
|
||||||
getUsernameState,
|
getUsernameState,
|
||||||
(state: UsernameStateType): UsernameReservationStateType =>
|
(state: UsernameStateType): UsernameReservationStateType =>
|
||||||
|
|
|
@ -24,7 +24,6 @@ import { selectRecentEmojis } from '../selectors/emojis';
|
||||||
import {
|
import {
|
||||||
getUsernameEditState,
|
getUsernameEditState,
|
||||||
getUsernameLinkState,
|
getUsernameLinkState,
|
||||||
getUsernameLinkRecovered,
|
|
||||||
} from '../selectors/username';
|
} from '../selectors/username';
|
||||||
|
|
||||||
function renderEditUsernameModalBody(props: {
|
function renderEditUsernameModalBody(props: {
|
||||||
|
@ -55,7 +54,6 @@ function mapStateToProps(
|
||||||
getHasCompletedUsernameLinkOnboarding(state);
|
getHasCompletedUsernameLinkOnboarding(state);
|
||||||
const usernameEditState = getUsernameEditState(state);
|
const usernameEditState = getUsernameEditState(state);
|
||||||
const usernameLinkState = getUsernameLinkState(state);
|
const usernameLinkState = getUsernameLinkState(state);
|
||||||
const usernameLinkRecovered = getUsernameLinkRecovered(state);
|
|
||||||
const usernameLinkColor = getUsernameLinkColor(state);
|
const usernameLinkColor = getUsernameLinkColor(state);
|
||||||
const usernameLink = getUsernameLink(state);
|
const usernameLink = getUsernameLink(state);
|
||||||
const usernameCorrupted = getUsernameCorrupted(state);
|
const usernameCorrupted = getUsernameCorrupted(state);
|
||||||
|
@ -82,7 +80,6 @@ function mapStateToProps(
|
||||||
usernameLinkState,
|
usernameLinkState,
|
||||||
usernameLinkColor,
|
usernameLinkColor,
|
||||||
usernameLinkCorrupted,
|
usernameLinkCorrupted,
|
||||||
usernameLinkRecovered,
|
|
||||||
usernameLink,
|
usernameLink,
|
||||||
|
|
||||||
renderEditUsernameModalBody,
|
renderEditUsernameModalBody,
|
||||||
|
|
|
@ -27,11 +27,6 @@ export enum ConfirmUsernameResult {
|
||||||
ConflictOrGone = 'ConflictOrGone',
|
ConflictOrGone = 'ConflictOrGone',
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum ResetUsernameLinkResult {
|
|
||||||
Ok = 'Ok',
|
|
||||||
OkRecovered = 'OkRecovered',
|
|
||||||
}
|
|
||||||
|
|
||||||
export function getUsernameFromSearch(searchTerm: string): string | undefined {
|
export function getUsernameFromSearch(searchTerm: string): string | undefined {
|
||||||
try {
|
try {
|
||||||
window.SignalContext.usernames.hash(searchTerm);
|
window.SignalContext.usernames.hash(searchTerm);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue