diff --git a/lib/types/nav-types.js b/lib/types/nav-types.js --- a/lib/types/nav-types.js +++ b/lib/types/nav-types.js @@ -27,15 +27,13 @@ | 'friend-list' | 'block-list' | 'keyservers' - | 'build-info' - | 'danger-zone'; + | 'build-info'; export const webNavigationSettingsSectionValidator: TEnums = t.enums.of([ 'account', 'friend-list', 'block-list', 'keyservers', 'build-info', - 'danger-zone', ]); export type WebNavigationChatMode = 'view' | 'create'; export const webNavigationChatModeValidator: TEnums = t.enums.of([ diff --git a/lib/utils/url-utils.js b/lib/utils/url-utils.js --- a/lib/utils/url-utils.js +++ b/lib/utils/url-utils.js @@ -23,8 +23,7 @@ | 'friend-list' | 'block-list' | 'keyservers' - | 'build-info' - | 'danger-zone', + | 'build-info', threadCreation?: boolean, selectedUserList?: $ReadOnlyArray, inviteSecret?: string, @@ -48,7 +47,6 @@ 'block-list', 'keyservers', 'build-info', - 'danger-zone', ]), ), threadCreation: t.maybe(t.Boolean), @@ -70,7 +68,6 @@ const blockListRegex = new RegExp('(/|^)settings/block-list(/|$)', 'i'); const keyserversRegex = new RegExp('(/|^)settings/keyservers(/|$)', 'i'); const buildInfoRegex = new RegExp('(/|^)settings/build-info(/|$)', 'i'); -const dangerZoneRegex = new RegExp('(/|^)settings/danger-zone(/|$)', 'i'); const threadPendingRegex = new RegExp( `(/|^)thread/(${pendingThreadIDRegex})(/|$)`, 'i', @@ -97,7 +94,6 @@ const blockListTest = blockListRegex.test(url); const keyserversSettingsTest = keyserversRegex.test(url); const buildInfoTest = buildInfoRegex.test(url); - const dangerZoneTest = dangerZoneRegex.test(url); const threadPendingMatches = threadPendingRegex.exec(url); const threadCreateMatches = threadCreationRegex.exec(url); const inviteLinkMatches = inviteLinkRegex.exec(url); @@ -144,8 +140,6 @@ returnObj.settings = 'keyservers'; } else if (buildInfoTest) { returnObj.settings = 'build-info'; - } else if (dangerZoneTest) { - returnObj.settings = 'danger-zone'; } else if (qrCodeLoginMatches) { returnObj.qrCode = true; } diff --git a/web/app.react.js b/web/app.react.js --- a/web/app.react.js +++ b/web/app.react.js @@ -89,7 +89,6 @@ import history from './router-history.js'; import { MessageSearchStateProvider } from './search/message-search-state-provider.react.js'; import AccountSettings from './settings/account-settings.react.js'; -import DangerZone from './settings/danger-zone.react.js'; import KeyserverSelectionList from './settings/keyserver-selection-list.react.js'; import { getCommSharedWorker } from './shared-worker/shared-worker-provider.js'; import CommunityPicker from './sidebar/community-picker.react.js'; @@ -366,8 +365,6 @@ mainContent = ; } else if (settingsSection === 'build-info') { mainContent = null; - } else if (settingsSection === 'danger-zone') { - mainContent = ; } return (
diff --git a/web/navigation-panels/settings-switcher.react.js b/web/navigation-panels/settings-switcher.react.js --- a/web/navigation-panels/settings-switcher.react.js +++ b/web/navigation-panels/settings-switcher.react.js @@ -3,7 +3,6 @@ import * as React from 'react'; import { useDispatch } from 'lib/utils/redux-utils.js'; -import { usingCommServicesAccessToken } from 'lib/utils/services-utils.js'; import NavigationPanel from './navigation-panel.react.js'; import css from './settings-switcher.css'; @@ -57,31 +56,6 @@ ); }, [onClickKeyservers, staffCanSee]); - const onClickDangerZone = React.useCallback( - (event: SyntheticEvent) => { - event.preventDefault(); - dispatch({ - type: updateNavInfoActionType, - payload: { tab: 'settings', settingsSection: 'danger-zone' }, - }); - }, - [dispatch], - ); - const dangerZoneNavigationItem = React.useMemo(() => { - // Once we're using the identity service for auth, a user may only delete - // their Comm account using their primary device. Their primary device - // cannot be a web device at this time, so we hide the Danger Zone from web - // users. - if (usingCommServicesAccessToken) { - return null; - } - return ( - -

Danger Zone

-
- ); - }, [onClickDangerZone]); - return ( @@ -90,9 +64,6 @@ {keyserversNavigationItem} - - {dangerZoneNavigationItem} - ); } diff --git a/web/settings/account-delete-modal.css b/web/settings/account-delete-modal.css deleted file mode 100644 --- a/web/settings/account-delete-modal.css +++ /dev/null @@ -1,29 +0,0 @@ -.modalBody { - color: var(--fg); -} -.modalBody p { - font-size: var(--s-font-14); -} - -.deletionWarning { - font-weight: var(--bold); -} - -.formError { - font-size: var(--xs-font-12); - color: var(--error); - font-style: italic; - height: 24px; - display: flex; - justify-content: center; - align-items: flex-end; -} - -.errorPlaceholder { - height: 24px; -} - -.infoContainer { - display: flex; - column-gap: 8px; -} diff --git a/web/settings/account-delete-modal.react.js b/web/settings/account-delete-modal.react.js deleted file mode 100644 --- a/web/settings/account-delete-modal.react.js +++ /dev/null @@ -1,105 +0,0 @@ -// @flow - -import * as React from 'react'; - -import { - useDeleteAccount, - deleteAccountActionTypes, -} from 'lib/actions/user-actions.js'; -import { useModalContext } from 'lib/components/modal-provider.react.js'; -import SWMansionIcon from 'lib/components/swmansion-icon.react.js'; -import { createLoadingStatusSelector } from 'lib/selectors/loading-selectors.js'; -import { useDispatchActionPromise } from 'lib/utils/redux-promise-utils.js'; - -import css from './account-delete-modal.css'; -import Button, { buttonThemes } from '../components/button.react.js'; -import Modal from '../modals/modal.react.js'; -import { useSelector } from '../redux/redux-utils.js'; - -const deleteAccountLoadingStatusSelector = createLoadingStatusSelector( - deleteAccountActionTypes, -); - -const AccountDeleteModal: React.ComponentType<{}> = React.memo<{}>( - function AccountDeleteModal(): React.Node { - const inputDisabled = useSelector( - state => deleteAccountLoadingStatusSelector(state) === 'loading', - ); - - const callDeleteAccount = useDeleteAccount(); - const dispatchActionPromise = useDispatchActionPromise(); - const { popModal } = useModalContext(); - - const [errorMessage, setErrorMessage] = React.useState(''); - let error; - if (errorMessage) { - error = ( -
-

{errorMessage}

-
- ); - } - - const deleteAccountAction = React.useCallback(async () => { - try { - setErrorMessage(''); - const response = await callDeleteAccount(); - popModal(); - return response; - } catch (e) { - setErrorMessage('unknown error deleting account'); - throw e; - } - }, [callDeleteAccount, popModal]); - - const onDelete = React.useCallback( - (event: SyntheticEvent) => { - event.preventDefault(); - void dispatchActionPromise( - deleteAccountActionTypes, - deleteAccountAction(), - ); - }, - [deleteAccountAction, dispatchActionPromise], - ); - - const primaryButton = React.useMemo( - () => ( - - ), - [inputDisabled, onDelete], - ); - - return ( - -
-
-
- -

- Your account will be permanently deleted. There is no way to - reverse this. -

-
- {error} -
-
-
- ); - }, -); - -export default AccountDeleteModal; diff --git a/web/settings/danger-zone.css b/web/settings/danger-zone.css deleted file mode 100644 --- a/web/settings/danger-zone.css +++ /dev/null @@ -1,33 +0,0 @@ -.container { - flex: 1; - background-color: var(--frame-background-primary-default); -} - -.contentContainer { - padding: 40px; - width: 343px; -} - -.header { - color: var(--text-background-primary-default); - font-weight: var(--semi-bold); - line-height: var(--line-height-display); - padding-bottom: 40px; -} - -.subheading { - color: var(--text-background-secondary-default); - font-size: var(--xl-font-20); - font-weight: var(--semi-bold); - line-height: var(--line-height-display); - padding-bottom: 40px; -} - -.button { - width: 100%; -} - -.explanation { - padding-top: 8px; - color: var(--text-background-tertiary-default); -} diff --git a/web/settings/danger-zone.react.js b/web/settings/danger-zone.react.js deleted file mode 100644 --- a/web/settings/danger-zone.react.js +++ /dev/null @@ -1,48 +0,0 @@ -// @flow - -import * as React from 'react'; - -import { useModalContext } from 'lib/components/modal-provider.react.js'; -import { usingCommServicesAccessToken } from 'lib/utils/services-utils.js'; - -import AccountDeleteModal from './account-delete-modal.react.js'; -import css from './danger-zone.css'; -import Button, { buttonThemes } from '../components/button.react.js'; - -function DangerZone(): React.Node { - const { pushModal } = useModalContext(); - const onDeleteAccountClick = React.useCallback( - () => pushModal(), - [pushModal], - ); - - // Once we're using the identity service for auth, a user may only delete - // their Comm account using their primary device. Their primary device cannot - // be a web device at this time, so we hide the Danger Zone from web users. - if (usingCommServicesAccessToken) { - return null; - } - - return ( -
-
-

Danger Zone

-
Delete Account
- -

- Your account will be permanently deleted. There is no way to reverse - this. -

-
-
- ); -} - -export default DangerZone; diff --git a/web/settings/user-settings-list.react.js b/web/settings/user-settings-list.react.js --- a/web/settings/user-settings-list.react.js +++ b/web/settings/user-settings-list.react.js @@ -51,13 +51,6 @@ }); }, [dispatch]); - const onClickDangerZone = React.useCallback(() => { - dispatch({ - type: updateNavInfoActionType, - payload: { tab: 'settings', settingsSection: 'danger-zone' }, - }); - }, [dispatch]); - const keyserverSettingsListItem = React.useMemo(() => { if (!staffCanSee) { return null; @@ -96,11 +89,6 @@ name="Build info" onClick={onClickBuildInfo} /> -
), [ @@ -108,7 +96,6 @@ onClickAccountSettings, onClickBlockList, onClickBuildInfo, - onClickDangerZone, onClickFriendList, ], );