diff --git a/src/__mocks__/WebWorker.ts b/src/__mocks__/WebWorker.ts index 16fd398c51..d82cee45a2 100644 --- a/src/__mocks__/WebWorker.ts +++ b/src/__mocks__/WebWorker.ts @@ -1,24 +1,3 @@ -import { vi } from 'vitest'; - -export const createUploadWebWorker = (): Worker => { - return { - postMessage: vi.fn(), - terminate: vi.fn(), - onmessage: vi.fn(), - onerror: vi.fn(), - } as unknown as Worker; -}; - -export default { - createWriteStream: vi.fn().mockImplementation(() => ({ - getWriter: vi.fn().mockReturnValue({ - write: vi.fn(), - close: vi.fn(), - abort: vi.fn(), - }), - })), -}; - export class MockWorker implements Partial { private listeners: Record void)[]> = {}; public messagesSent: any[] = []; @@ -52,11 +31,3 @@ export class MockWorker implements Partial { (this.listeners['error'] || []).forEach((cb) => cb(error)); } } - -export const WORKER_MESSAGE_STATES = { - SUCCESS: 'success', - ERROR: 'error', - ABORT: 'abort', - CHECK_UPLOAD_STATUS: 'checkUploadStatus', - UPLOAD_STATUS: 'uploadStatus', -}; diff --git a/src/app/analytics/TrackingPlan.ts b/src/app/analytics/TrackingPlan.ts deleted file mode 100644 index 9b898d0903..0000000000 --- a/src/app/analytics/TrackingPlan.ts +++ /dev/null @@ -1,137 +0,0 @@ -// eslint-disable-next-line @typescript-eslint/no-namespace -export namespace TrackingPlan { - export interface DownloadProperties { - file_size: number; - file_extension: string; - bandwidth: number; - band_utilization: number; - process_identifier: string; - is_multiple: 0 | 1; - file_id: number; - file_name: string; - parent_folder_id: number; - file_download_method_supported?: string; - } - - export interface UploadProperties { - file_size: number; - file_extension: string; - bandwidth: number; - band_utilization: number; - process_identifier: string; - file_upload_id?: string; - is_multiple: 0 | 1; - file_name?: string; - parent_folder_id: string; - is_brave: boolean; - } - - interface DownloadProcess { - file_size: number; - file_extension: string; - bandwidth: number; - band_utilization: number; - process_identifier: string; - is_multiple: 0 | 1; - file_id: number; - file_name: string; - parent_folder_id: number; - } - - export type DownloadStartedProperties = DownloadProcess; - - export type DownloadCompletedProperties = DownloadProcess; - - export type DownloadAbortedProperties = DownloadProcess; - - export interface DownloadErrorProperties extends DownloadProcess { - error_message_user: string; - error_message: string; - stack_trace: string; - } - - export interface UploadCompletedProperties extends UploadProperties { - bucket_id: number; - file_id: number; - is_brave: boolean; - } - - export interface UploadErrorProperties extends UploadProperties { - bucket_id: number; - error_message_user: string; - error_message: string; - stack_trace: string; - is_brave: boolean; - } - - export interface UploadCompletedProperties extends UploadProperties { - bucket_id: number; - file_id: number; - is_brave: boolean; - } - - export interface UploadAbortedProperties extends UploadProperties { - bucket_id: number; - is_brave: boolean; - } - - export interface CanceledSubscriptionProperties { - feedback: string; - } - export interface PublicSharedProperties { - is_folder: boolean; - share_type: string; - user_id: number; - item_id: number; - } - export interface RestrictedSharedProperties { - is_folder: boolean; - share_type: string; - user_id: number; - item_id: number; - invitations_send: number; - } - export interface SharedInvitationsAcceptedProperties { - invitation_id: string; - } - export interface FilePreviewProperties { - file_size: number; - file_extension: string; - preview_id: string | undefined; - } - export interface BackupKeyDownloadedProperties { - backup_key_downloaded: boolean; - } - export interface PasswordRecoveredProperties { - method: string; - } - - export interface AccountUnblockProperties { - email: string; - } - - export enum EventNames { - FileUploadStart = 'Upload Started', - FileUploadError = 'Upload Error', - FileUploadCompleted = 'Upload Completed', - FileUploadAborted = 'Upload Aborted', - FileUploadPause = 'Upload Paused', - FileUploadResume = 'Upload Resumed', - FileUploadRetry = 'Upload Retried', - FileDownloadCompleted = 'Download Completed', - FileDownloadError = 'Download Error', - FileDownloadStarted = 'Download Started', - FileDownloadAborted = 'Download Aborted', - CanceledSubscription = 'Subscription Canceled', - PublicShared = 'Shared Public', - RestrictedShared = 'Shared Restricted', - SharedInvitationsAccepted = 'Shared Accepted', - FilePreviewOpened = 'File Preview Opened', - FilePreviewed = 'File Previewed', - FilePreviewClicked = 'File Preview Clicked', - BackupKeyDownloaded = 'Backup Key Downloaded', - PasswordRecovered = 'Password Recovered', - UnblockAccountEmailSent = 'Unblock Account Email Sent', - AccountUnblocked = 'Account Unblocked', - } -} diff --git a/src/app/analytics/types.ts b/src/app/analytics/types.ts deleted file mode 100644 index 2786e85ab2..0000000000 --- a/src/app/analytics/types.ts +++ /dev/null @@ -1,55 +0,0 @@ -export enum AnalyticsTrackNames { - SignOut = 'User SignOut', - SignIn = 'user-signin', - SignInAttempted = 'user-signin-attempted', - SignUp = 'User Signup', - UserEnterPayments = 'Checkout Opened', - PlanSubscriptionSelected = 'plan-subscription-selected', - FolderCreated = 'folder-created', - FolderRename = 'folder-rename', - FileRename = 'file-rename', - - OpenWelcomeFile = 'file-welcome-open', - DeleteWelcomeFile = 'file-welcome-delete', - FileShare = 'file-share', - UserResetPasswordRequest = 'user-reset-password-request', - FileUploadBucketIdUndefined = 'file-upload-bucketid-undefined', - ShareLinkBucketIdUndefined = 'share-link-bucketid-undefined', - PaymentConversionEvent = 'Payment Conversion', - CancelPaymentConversionEvent = 'Cancel Payment Conversion', -} - -export interface PriceMetadata { - maxSpaceBytes: string; - name: string; - planType: string; - show?: string; -} - -export interface RecurringPrice { - aggregate_usage?: unknown; - interval: 'month' | 'year'; - interval_count: number; - trial_period_days: number; - usage_type: string; -} - -export interface PriceData { - active: boolean; - billing_schema: string; - created: number; - currency: string; - id: string; - livemode: boolean; - lookup_key?: string; - metadata: PriceMetadata; - nickname: string; - object: string; - product: string; - recurring?: RecurringPrice; - tax_behaviour: string; - transform_quantity: unknown; - type: 'recurring' | 'one_time'; - unit_amount: number; - unit_amount_decimal: string; -} diff --git a/src/app/banners/Banner.tsx b/src/app/banners/Banner.tsx deleted file mode 100644 index d17ff7a89f..0000000000 --- a/src/app/banners/Banner.tsx +++ /dev/null @@ -1,50 +0,0 @@ -import { CheckCircle, X } from '@phosphor-icons/react'; -import LifetimeBig from 'assets/images/banner/lifetime_big.png'; -import { useTranslationContext } from 'app/i18n/provider/TranslationProvider'; -import envService from 'services/env.service'; - -const Banner = ({ showBanner, onClose }: { showBanner: boolean; onClose: () => void }): JSX.Element => { - const { translate } = useTranslationContext(); - return ( -
-
- -
-
- Discount label -
-
-
-

{translate('banner.label')}

-

{translate('banner.title')}

-
-
- -
- -

{translate('banner.guarantee')}

-
-
-
-
-
-
- ); -}; -export default Banner; diff --git a/src/app/banners/BitDefenderBanner.tsx b/src/app/banners/BitDefenderBanner.tsx deleted file mode 100644 index 3b37acb890..0000000000 --- a/src/app/banners/BitDefenderBanner.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { X } from '@phosphor-icons/react'; -import BitDefenderBanner from 'assets/images/banner/Ban_Internext.jpg'; - -interface BitdeFenderBannerProps { - showBanner: boolean; - onClose: () => void; -} - -const BitdefenderBanner = ({ showBanner, onClose }: BitdeFenderBannerProps): JSX.Element => { - const handleOnClick = () => { - window.open('https://www.bitdefender.com/pages/consumer/en/new/trial/ts-trial-3m/internxt/', '_blank', 'noopener'); - }; - - return ( -
-
- - -
- -
-
-
- ); -}; - -export default BitdefenderBanner; diff --git a/src/app/banners/CyberAwarenessBanner.tsx b/src/app/banners/CyberAwarenessBanner.tsx deleted file mode 100644 index 75e686f719..0000000000 --- a/src/app/banners/CyberAwarenessBanner.tsx +++ /dev/null @@ -1,60 +0,0 @@ -import { X } from '@phosphor-icons/react'; -import BackgroundImage from 'assets/images/banner/banner_internal_cs_month_800x450_bg.webp'; -import InternxtLogo from 'assets/images/banner/inxt-logo.svg?react'; - -const redirectURL = 'https://internxt.com/pricing#priceTable'; - -const CyberAwarenessBanner = ({ showBanner, onClose }: { showBanner: boolean; onClose: () => void }) => { - return ( -
-
- -
-
-
-
- -

Cyber Security Awareness Month

-
-
-

- 80% OFF -

-
- -
-
-
-
-
- ); -}; - -export default CyberAwarenessBanner; diff --git a/src/app/banners/SubscriptionBanner.tsx b/src/app/banners/SubscriptionBanner.tsx deleted file mode 100644 index b2b13e0c9c..0000000000 --- a/src/app/banners/SubscriptionBanner.tsx +++ /dev/null @@ -1,75 +0,0 @@ -import { CheckCircle, X } from '@phosphor-icons/react'; -import { useTranslationContext } from 'app/i18n/provider/TranslationProvider'; -import styles from 'app/banners/FeaturesBanner.module.scss'; -import bannerImage from 'assets/images/banner/internxt_vpn_antivirus_new_plans.webp'; - -interface SubscriptionBannerProps { - showBanner: boolean; - onClose: () => void; - isLifetimeUser?: boolean; -} - -const SubscriptionBanner = ({ showBanner, onClose, isLifetimeUser }: SubscriptionBannerProps): JSX.Element => { - const { translate, translateList } = useTranslationContext(); - const features = translateList(isLifetimeUser ? 'lifetimesBanner.features' : 'susbcriptionsBanner.features'); - - const handleOnClick = () => { - window.open('https://internxt.com/pricing', '_blank', 'noopener noreferrer'); - onClose(); - }; - - return ( - //Background -
-
- -
-
-

- {translate(isLifetimeUser ? 'lifetimesBanner.title' : 'susbcriptionsBanner.title')} -

-
- {features.map((card, index) => ( -
- -

{card}

-
- ))} -
- -

- {translate(isLifetimeUser ? 'lifetimesBanner.description' : 'susbcriptionsBanner.description')} -

-
- -
-
- -
-
-
-
- ); -}; - -export default SubscriptionBanner; diff --git a/src/app/banners/SummerBanner.tsx b/src/app/banners/SummerBanner.tsx deleted file mode 100644 index c62d200ddd..0000000000 --- a/src/app/banners/SummerBanner.tsx +++ /dev/null @@ -1,44 +0,0 @@ -import { X } from '@phosphor-icons/react'; -import BackgroundImage from 'assets/images/banner/BannerInternal-SummerCampaign-800x450-EN.svg'; -import InternxtLogo from 'assets/images/banner/inxt-logo.svg?react'; - -const SummerBanner = ({ showBanner, onClose }: { showBanner: boolean; onClose: () => void }) => { - return ( -
-
- -
-
- -
-
-

SUMMER DEAL!

-
-
-

90% off

-

2TB PLAN FOR 1 YEAR

-
-
-
-
-
-
- ); -}; - -export default SummerBanner; diff --git a/src/app/core/types.ts b/src/app/core/types.ts index 349e3484a7..816c75f5cf 100644 --- a/src/app/core/types.ts +++ b/src/app/core/types.ts @@ -77,10 +77,6 @@ export default class AppError extends Error { } } -export enum DevicePlatform { - Web = 'web', -} - export enum Workspace { Individuals = 'personal', Business = 'business', @@ -90,11 +86,6 @@ export enum DragAndDropType { DriveItem = 'drive-item', } -export enum TimeInterval { - Month = 'month', - Year = 'year', -} - export enum AppViewLayout { Empty = 'empty', HeaderAndSidenav = 'header-and-sidenav', @@ -148,16 +139,6 @@ export enum AppView { OAuthLink = 'oauth-link', } -export enum SignupDeviceSource { - Macintosh = 'MacOs', - Android = 'Android', - Iphone = 'iPhone', - Windows = 'Windows', - Linux = 'Linux', - Ipad = 'iPad', - Other = 'Other', -} - export enum LocalStorageItem { Workspace = 'workspace', User = 'xUser', diff --git a/src/app/core/views/MaintenanceView/MaintenanceView.scss b/src/app/core/views/MaintenanceView/MaintenanceView.scss deleted file mode 100644 index 01f92ba4b9..0000000000 --- a/src/app/core/views/MaintenanceView/MaintenanceView.scss +++ /dev/null @@ -1,4 +0,0 @@ -.maintenance { - padding-top: 100px; - text-align: center; -} diff --git a/src/app/core/views/MaintenanceView/MaintenanceView.tsx b/src/app/core/views/MaintenanceView/MaintenanceView.tsx deleted file mode 100644 index 9f33a7afe3..0000000000 --- a/src/app/core/views/MaintenanceView/MaintenanceView.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import './MaintenanceView.scss'; - -// TODO: REMOVE THIS COMPONENT -function Maintenance(): JSX.Element { - return ( -
-

Sorry, X-Cloud is under Maintenance! D:

-
- ); -} - -export default Maintenance; diff --git a/src/app/crypto/services/pgp.service.ts b/src/app/crypto/services/pgp.service.ts index 1a71b5d6d8..4035db72eb 100644 --- a/src/app/crypto/services/pgp.service.ts +++ b/src/app/crypto/services/pgp.service.ts @@ -15,12 +15,6 @@ export function comparePrivateKeyCiphertextIDs(privateKey: PrivateKey, encrypted return messageKeyID === privateKeyID; } -export function comparePublicKeyCiphertextIDs(publicKey: PublicKey, encryptedMessage: Message): boolean { - const messageKeyID = encryptedMessage.getEncryptionKeyIDs()[0].toHex(); - const publiKeyID = publicKey.getSubkeys()[0].getKeyID().toHex(); - return messageKeyID === publiKeyID; -} - export function compareKeyPairIDs(privateKey: PrivateKey, publicKey: PublicKey): boolean { const publiKeyID = publicKey.getSubkeys()[0].getKeyID().toHex(); const privateKeyID = privateKey.getSubkeys()[0].getKeyID().toHex(); diff --git a/src/app/crypto/services/utilspgp.ts b/src/app/crypto/services/utilspgp.ts index 6746924228..b1b3e03212 100644 --- a/src/app/crypto/services/utilspgp.ts +++ b/src/app/crypto/services/utilspgp.ts @@ -1,11 +1,5 @@ import { getOpenpgp } from './pgp.service'; -export async function isValidBase64(key: string): Promise { - const isPlain = await isValid(key); - - return !isPlain; -} - export async function isValid(key: string): Promise { try { const openpgp = await getOpenpgp(); diff --git a/src/app/drive/components/ShareDialog/types.ts b/src/app/drive/components/ShareDialog/types.ts index 46eda95c05..f6703a68d6 100644 --- a/src/app/drive/components/ShareDialog/types.ts +++ b/src/app/drive/components/ShareDialog/types.ts @@ -1,13 +1,6 @@ export type AccessMode = 'public' | 'restricted'; export type UserRole = 'owner' | 'editor' | 'reader'; export type Views = 'general' | 'invite' | 'requests'; -export type RequestStatus = 'pending' | 'accepted' | 'denied'; - -export const REQUEST_STATUS = { - PENDING: 'pending' as RequestStatus, - ACCEPTED: 'accepted' as RequestStatus, - DENIED: 'denied' as RequestStatus, -}; export interface InvitedUserProps { avatar: string | null; @@ -19,15 +12,6 @@ export interface InvitedUserProps { sharingId: string; } -export interface RequestProps { - avatar: string; - name: string; - lastname: string; - email: string; - message?: string; - status: RequestStatus; -} - export interface ViewProps { view: Views; } diff --git a/src/app/drive/components/ShareDialog/utils/index.test.ts b/src/app/drive/components/ShareDialog/utils/index.test.ts index 7a923ffab0..11cb6309a5 100644 --- a/src/app/drive/components/ShareDialog/utils/index.test.ts +++ b/src/app/drive/components/ShareDialog/utils/index.test.ts @@ -1,37 +1,10 @@ import { describe, expect, test, vi, beforeEach, afterEach } from 'vitest'; -import { isRequestPending, cropSharedName, isAdvancedShareItem, getLocalUserData, filterEditorAndReader } from '.'; -import { REQUEST_STATUS } from '../types'; +import { cropSharedName, isAdvancedShareItem, getLocalUserData, filterEditorAndReader } from '.'; import { localStorageService } from 'services'; import { DriveItemData } from 'app/drive/types'; import { AdvancedSharedItem } from 'app/share/types'; import { Role } from '@internxt/sdk/dist/drive/share/types'; -describe('Check if the request is pending', () => { - test('When request status is pending, then returns true', () => { - const status = REQUEST_STATUS.PENDING; - - const result = isRequestPending(status); - - expect(result).toBeTruthy(); - }); - - test('When request status is accepted, then returns false', () => { - const status = REQUEST_STATUS.ACCEPTED; - - const result = isRequestPending(status); - - expect(result).toBeFalsy(); - }); - - test('When request status is denied, then returns false', () => { - const status = REQUEST_STATUS.DENIED; - - const result = isRequestPending(status); - - expect(result).toBeFalsy(); - }); -}); - describe('Cropping the name', () => { test('When name length is less than max length, then returns original name', () => { const name = 'Short Name'; diff --git a/src/app/drive/components/ShareDialog/utils/index.ts b/src/app/drive/components/ShareDialog/utils/index.ts index e531c6c0c8..1edb0b3005 100644 --- a/src/app/drive/components/ShareDialog/utils/index.ts +++ b/src/app/drive/components/ShareDialog/utils/index.ts @@ -1,14 +1,10 @@ import { DriveItemData } from 'app/drive/types'; -import { REQUEST_STATUS, RequestStatus } from '../types'; import { AdvancedSharedItem } from 'app/share/types'; import { UserSettings } from '@internxt/sdk/dist/shared/types/userSettings'; import { Role } from '@internxt/sdk/dist/drive/share/types'; import { MAX_SHARED_NAME_LENGTH } from 'views/Shared/SharedView'; import localStorageService from 'services/local-storage.service'; -export const isRequestPending = (status: RequestStatus): boolean => - status !== REQUEST_STATUS.DENIED && status !== REQUEST_STATUS.ACCEPTED; - export const cropSharedName = (name: string) => { if (name.length > MAX_SHARED_NAME_LENGTH) { return name.substring(0, 32).concat('...'); diff --git a/src/app/drive/services/icon.service.ts b/src/app/drive/services/icon.service.ts index d56f590a7c..d36c765892 100644 --- a/src/app/drive/services/icon.service.ts +++ b/src/app/drive/services/icon.service.ts @@ -37,23 +37,6 @@ const iconsByFileExtensionGroup = { }; const extensionsList = fileExtensionService.computeExtensionsLists(); -export const icons = { - AudioFile, - CodeFile, - FigmaFile, - ImageFile, - PdfFile, - PptFile, - TxtFile, - VideoFile, - WordFile, - XlsFile, - XmlFile, - ZipFile, - DefaultFile, - LightFolder, -}; - export const getItemIcon = (isFolder: boolean, itemExtension?: string): FunctionComponent> => { let groupId: FileExtensionGroup = FileExtensionGroup.Default; diff --git a/src/app/network/NetworkFacade.ts b/src/app/network/NetworkFacade.ts index 65d7c516f4..1b47887f96 100644 --- a/src/app/network/NetworkFacade.ts +++ b/src/app/network/NetworkFacade.ts @@ -50,14 +50,6 @@ interface UploadTask { index: number; } -export interface DownloadChunkTask { - index: number; - chunkStart: number; - chunkEnd: number; - attempt: number; - maxRetries: number; -} - /** * The entry point for interacting with the network */ diff --git a/src/app/network/types/index.ts b/src/app/network/types/index.ts index 0b3e4f7380..be8c467aba 100644 --- a/src/app/network/types/index.ts +++ b/src/app/network/types/index.ts @@ -10,8 +10,6 @@ export interface LegacyShardMeta { tree: string[]; } -export type ShardMeta = Omit; - export interface DownloadOptions { key?: Buffer; token?: string; diff --git a/src/app/share/services/folder.service.ts b/src/app/share/services/folder.service.ts deleted file mode 100644 index f803b0ece7..0000000000 --- a/src/app/share/services/folder.service.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { SharedDirectoryFile, SharedDirectoryFolder } from '@internxt/sdk/dist/drive/share/types'; -import { Iterator } from 'app/core/collections'; -import { getSharedDirectoryFiles, getSharedDirectoryFolders } from 'app/share/services/share.service'; - -interface RequiredQueryValues { - token: string; - directoryId: number; - parentId: number; - code: string; - password?: string; -} - -export class SharedFolderFilesIterator implements Iterator { - private offset: number; - private limit: number; - private readonly queryValues: RequiredQueryValues; - - constructor(queryValues: RequiredQueryValues, limit?: number, offset?: number) { - this.limit = limit || 5; - this.offset = offset || 0; - this.queryValues = queryValues; - } - - async next(): Promise<{ value: SharedDirectoryFile[]; done: boolean }> { - const { code, directoryId, parentId, token, password } = this.queryValues; - - const { files, last } = await getSharedDirectoryFiles({ - code, - directoryId, - parentId, - token, - offset: this.offset, - limit: this.limit, - password, - }); - - this.offset += this.limit; - - return { value: files, done: last }; - } -} - -export class SharedDirectoryFolderIterator implements Iterator { - private offset: number; - private limit: number; - private readonly queryValues: Omit; - - constructor(queryValues: Omit, limit?: number, offset?: number) { - this.limit = limit || 5; - this.offset = offset || 0; - this.queryValues = queryValues; - } - - async next(): Promise<{ value: SharedDirectoryFolder[]; done: boolean }> { - const { directoryId, parentId, token, password } = this.queryValues; - - const { folders, last } = await getSharedDirectoryFolders({ - directoryId, - parentId, - token, - offset: this.offset, - limit: this.limit, - password, - }); - - this.offset += this.limit; - - return { value: folders, done: last }; - } -} diff --git a/src/app/share/types/index.ts b/src/app/share/types/index.ts index 8a912f3c1f..5452deddcc 100644 --- a/src/app/share/types/index.ts +++ b/src/app/share/types/index.ts @@ -24,8 +24,6 @@ export type PreviewFileItem = DriveFileData & { folderUuid: string; }; -export type OrderBy = { field: 'views' | 'createdAt'; direction: 'ASC' | 'DESC' } | undefined; - export type SharedNamePath = { id: number; name: string; diff --git a/src/app/store/slices/storage/storage.thunks/fetchDialogContentThunk.ts b/src/app/store/slices/storage/storage.thunks/fetchDialogContentThunk.ts index 8ae369ab3d..d408d0bb2f 100644 --- a/src/app/store/slices/storage/storage.thunks/fetchDialogContentThunk.ts +++ b/src/app/store/slices/storage/storage.thunks/fetchDialogContentThunk.ts @@ -1,15 +1,12 @@ -import { ActionReducerMapBuilder, createAsyncThunk } from '@reduxjs/toolkit'; +import { createAsyncThunk } from '@reduxjs/toolkit'; import _ from 'lodash'; import newStorageService from 'app/drive/services/new-storage.service'; -import { t } from 'i18next'; import { storageActions } from '..'; import { RootState } from '../../..'; import databaseService, { DatabaseCollection } from '../../../../database/services/database.service'; import { DriveFolderData, DriveItemData } from 'app/drive/types'; -import notificationsService, { ToastType } from '../../../../notifications/services/notifications.service'; import workspacesSelectors from '../../workspaces/workspaces.selectors'; -import { StorageState } from '../storage.model'; export const fetchDialogContentThunk = createAsyncThunk( 'storage/fetchDialogContentThunk', @@ -53,12 +50,3 @@ export const fetchDialogContentThunk = createAsyncThunk): void => { - builder - .addCase(fetchDialogContentThunk.pending, () => undefined) - .addCase(fetchDialogContentThunk.fulfilled, () => undefined) - .addCase(fetchDialogContentThunk.rejected, (state, action) => { - notificationsService.show({ text: t('error.fetchingFolderContent'), type: ToastType.Error }); - }); -}; diff --git a/src/app/store/slices/storage/storage.thunks/fetchSortedFolderContentThunk.test.ts b/src/app/store/slices/storage/storage.thunks/fetchSortedFolderContentThunk.test.ts index 28bb915d4f..58f4d21e64 100644 --- a/src/app/store/slices/storage/storage.thunks/fetchSortedFolderContentThunk.test.ts +++ b/src/app/store/slices/storage/storage.thunks/fetchSortedFolderContentThunk.test.ts @@ -28,10 +28,6 @@ vi.mock('..', () => ({ }, })); -vi.mock('i18next', () => ({ - t: vi.fn((key) => key), -})); - describe('Thunk of fetch sorted folder content', () => { const mockFolderId = 'folder-123'; const dispatch = vi.fn(); diff --git a/src/app/store/slices/storage/storage.thunks/fetchSortedFolderContentThunk.ts b/src/app/store/slices/storage/storage.thunks/fetchSortedFolderContentThunk.ts index 41220d9ace..cf6b1d410b 100644 --- a/src/app/store/slices/storage/storage.thunks/fetchSortedFolderContentThunk.ts +++ b/src/app/store/slices/storage/storage.thunks/fetchSortedFolderContentThunk.ts @@ -1,14 +1,11 @@ -import { ActionReducerMapBuilder, createAsyncThunk } from '@reduxjs/toolkit'; +import { createAsyncThunk } from '@reduxjs/toolkit'; -import { t } from 'i18next'; import { storageActions } from '..'; import { RootState } from '../../..'; import { SdkFactory } from '../../../../core/factory/sdk'; import errorService from 'services/error.service'; import { DriveItemData } from 'app/drive/types'; -import notificationsService, { ToastType } from '../../../../notifications/services/notifications.service'; import workspacesSelectors from '../../workspaces/workspaces.selectors'; -import { StorageState } from '../storage.model'; const DEFAULT_LIMIT = 50; @@ -109,17 +106,3 @@ export const fetchSortedFolderContentThunk = createAsyncThunk): void => { - builder - .addCase(fetchSortedFolderContentThunk.pending, (state, action) => { - state.loadingFolders[action.meta.arg] = true; - }) - .addCase(fetchSortedFolderContentThunk.fulfilled, (state, action) => { - state.loadingFolders[action.meta.arg] = false; - }) - .addCase(fetchSortedFolderContentThunk.rejected, (state, action) => { - state.loadingFolders[action.meta.arg] = false; - notificationsService.show({ text: t('error.fetchingFolderContent'), type: ToastType.Error }); - }); -}; diff --git a/src/app/store/slices/workspaces/workspacesStore.ts b/src/app/store/slices/workspaces/workspacesStore.ts index 0b788e211f..568301a678 100644 --- a/src/app/store/slices/workspaces/workspacesStore.ts +++ b/src/app/store/slices/workspaces/workspacesStore.ts @@ -18,13 +18,6 @@ import { planThunks } from '../plan'; import sessionThunks from '../session/session.thunks'; import workspacesSelectors from './workspaces.selectors'; -export interface PersonalWorkspace { - uuid: string; - name: string; - type: 'Business' | 'Personal'; - avatar: MediaSource | null; -} - export interface WorkspacesState { workspaces: WorkspaceData[]; workspaceCredentials: WorkspaceCredentialsDetails | null; diff --git a/src/app/tasks/types.ts b/src/app/tasks/types.ts index 5f93da0a26..845d6dbc11 100644 --- a/src/app/tasks/types.ts +++ b/src/app/tasks/types.ts @@ -157,7 +157,6 @@ export type DownloadFilesData = { name: string; type: string; items?: DriveItemD export type DownloadFolderData = { id: number; name: string; type: string; isFolder: boolean }; export type UploadFileData = { uploadFile: File; parentFolderId: string }; export type UploadFolderData = { folder: IRoot; parentFolderId: string }; -export type UploadSharedItemData = UploadFileData & SharedItemAuthenticationData; export type SharedItemAuthenticationData = { currentFolderId: string; ownerUserAuthenticationData: { diff --git a/src/components/AuthButton.tsx b/src/components/AuthButton.tsx deleted file mode 100644 index eb4bfc53c5..0000000000 --- a/src/components/AuthButton.tsx +++ /dev/null @@ -1,21 +0,0 @@ -const AuthButton = ({ - isDisabled, - text, - textWhenDisabled, -}: { - isDisabled: boolean; - text: string; - textWhenDisabled: string; -}): JSX.Element => ( - -); - -export default AuthButton; diff --git a/src/components/DefaultAvatar.tsx b/src/components/DefaultAvatar.tsx deleted file mode 100644 index 27ec9e0885..0000000000 --- a/src/components/DefaultAvatar.tsx +++ /dev/null @@ -1,33 +0,0 @@ -interface DefaultAvatarProps { - fullName: string; - diameter: number; - className?: string; -} -export default function DefaultAvatar({ - fullName, - diameter, - className = '', -}: Readonly): JSX.Element { - const initials = nameToInitials(fullName); - - return ( -
-

{initials}

-
- ); -} - -function nameToInitials(fullName: string) { - if (!fullName) return ''; - const namesArray = fullName?.trim().split(' '); - - if (namesArray.length === 1) return `${namesArray[0].charAt(0)}`; - else { - const first = namesArray[0].charAt(0); - const second = namesArray[1].charAt(0); - return first + second; - } -} diff --git a/src/components/index.ts b/src/components/index.ts index 9a5ebf352d..89f0cff19e 100644 --- a/src/components/index.ts +++ b/src/components/index.ts @@ -1,4 +1,3 @@ -export { default as AuthButton } from './AuthButton'; export { default as BaseButton } from './BaseButton'; export { default as BaseDialog } from './BaseDialog'; export { default as BreadcrumbsBackupsView } from './BreadcrumbsBackupsView'; @@ -9,7 +8,6 @@ export { default as BreadcrumbsMoveItemsDialogView } from './BreadcrumbsMoveItem export * from './BreadcrumbsHelper'; export { default as Card } from './Card'; export { default as Copyable } from './Copyable'; -export { default as DefaultAvatar } from './DefaultAvatar'; export { default as Empty } from './Empty'; export { default as ExpiredLinkView } from './ExpiredLinkView'; export { LoadingRowSkeleton } from './LoadingRowSkeleton'; diff --git a/src/hooks/index.ts b/src/hooks/index.ts index b153e34d77..a00c25bf68 100644 --- a/src/hooks/index.ts +++ b/src/hooks/index.ts @@ -3,5 +3,4 @@ export { default as useBeforeUnload } from './useBeforeUnload'; export { useDebounce } from './useDebounce'; export { default as useEffectAsync } from './useEffectAsync'; export { default as useForceUpdate } from './useForceUpdate'; -export { default as useIdle } from './useIdle'; export { default as useVpnAuth } from './useVpnAuth'; diff --git a/src/hooks/useIdle.tsx b/src/hooks/useIdle.tsx deleted file mode 100644 index af5c224335..0000000000 --- a/src/hooks/useIdle.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import _ from 'lodash'; -import { useState, useEffect } from 'react'; - -export default function useIdle(ms: number): boolean { - const [isIdle, setIsIdle] = useState(false); - - useEffect(() => { - let timeout; - - function setUpTimeout() { - timeout = setTimeout(() => { - setIsIdle(true); - }, ms); - } - - function listener() { - setIsIdle(false); - if (timeout) clearTimeout(timeout); - setUpTimeout(); - } - - const throttledListener = _.throttle(listener, 100); - - document.addEventListener('mousemove', throttledListener); - document.addEventListener('click', throttledListener); - document.addEventListener('keydown', throttledListener); - - setUpTimeout(); - - return () => { - if (timeout) clearTimeout(timeout); - document.removeEventListener('mousemove', throttledListener); - document.removeEventListener('click', throttledListener); - document.removeEventListener('keydown', throttledListener); - }; - }, []); - - return isIdle; -} diff --git a/src/services/array.service.ts b/src/services/array.service.ts deleted file mode 100644 index b7e08ca7e3..0000000000 --- a/src/services/array.service.ts +++ /dev/null @@ -1,9 +0,0 @@ -function insertAt(array: unknown[], index: number, elementsToInsert: unknown[]): void { - array.splice(index, 0, ...elementsToInsert); -} - -const arrayService = { - insertAt, -}; - -export default arrayService; diff --git a/src/services/auth.service.ts b/src/services/auth.service.ts index 0c5212d84e..a5023d097e 100644 --- a/src/services/auth.service.ts +++ b/src/services/auth.service.ts @@ -63,7 +63,7 @@ export type RegisterFunction = ( mnemonic: string; }>; -export type SignUpParams = { +type SignUpParams = { doSignUp: RegisterFunction; email: string; password: string; @@ -80,7 +80,7 @@ type LogInParams = { loginType?: 'web' | 'desktop'; }; -export type AuthenticateUserParams = { +type AuthenticateUserParams = { email: string; password: string; authMethod: AuthMethodTypes; @@ -286,7 +286,7 @@ export const recoverAccountWithBackupKey = async ( /** * Recovery method for old backup keys format (mnemonic only) */ -export const recoveryOldBackuptWithToken = async (token: string, password: string, mnemonic: string): Promise => { +const recoveryOldBackuptWithToken = async (token: string, password: string, mnemonic: string): Promise => { try { const authClient = SdkFactory.getNewApiInstance().createAuthClient(); const recoverPayload = await prepareOldBackupRecoverPayloadForBackend({ mnemonic, password, token }); diff --git a/src/services/date.service.test.ts b/src/services/date.service.test.ts index d29e6215ca..6b5791aa87 100644 --- a/src/services/date.service.test.ts +++ b/src/services/date.service.test.ts @@ -12,14 +12,6 @@ describe('dateService', () => { expect(formattedDate).toBe('01/10/2023'); }); - test('fromNow function should correctly return a string describing the time elapsed since a given date', () => { - const date = new Date(); - const fromNow = dateService.fromNow(date); - - expect(fromNow).toBe(dayjs(date).fromNow()); - expect(fromNow).toBe('a few seconds ago'); - }); - test('isDateOneBefore function should correctly determine if one date is before another', () => { const dateOne = new Date(); const dateTwo = new Date(Date.now() + 1000); diff --git a/src/services/date.service.ts b/src/services/date.service.ts index 518395ed7f..b21c1c83d3 100644 --- a/src/services/date.service.ts +++ b/src/services/date.service.ts @@ -7,10 +7,6 @@ export function format(date: Date | string, format: string): string { return dayjs(date).format(format); } -export function fromNow(date: Date | string): string { - return dayjs(date).fromNow(); -} - function isDateOneBefore({ dateOne, dateTwo }: { dateOne: Date | string; dateTwo: Date | string }): boolean { return dayjs(dateOne).isBefore(dayjs(dateTwo)); } @@ -30,7 +26,6 @@ export const formatDefaultDate = (date: Date | string | number, translate: (key: const dateService = { format, - fromNow, isDateOneBefore, getCurrentDate, getExpirationDate, diff --git a/src/services/index.ts b/src/services/index.ts index a063352fe4..f0479d9e06 100644 --- a/src/services/index.ts +++ b/src/services/index.ts @@ -1,5 +1,3 @@ -export * from './array.service'; -export { default as arrayService } from './array.service'; export * from './browser.service'; export { default as browserService } from './browser.service'; export * from './config.service'; @@ -20,12 +18,8 @@ export { default as localStorageService } from './local-storage.service'; export * from './media.service'; export * from './navigation.service'; export { default as navigationService } from './navigation.service'; -export * from './number.service'; -export { default as numberService } from './number.service'; export * from './operating-system.service'; export { default as operatingSystemService } from './operating-system.service'; -export * from './polling.service'; -export { default as pollingService } from './polling.service'; export * from './socket.service'; export { default as RealtimeService } from './socket.service'; export * from './storage-keys'; diff --git a/src/services/media.service.test.ts b/src/services/media.service.test.ts index bcc1b175e5..5a3fdc4da5 100644 --- a/src/services/media.service.test.ts +++ b/src/services/media.service.test.ts @@ -1,12 +1,5 @@ import { describe, it, expect, test } from 'vitest'; -import { - audioTypes, - isFileSizePreviewable, - isTypeSupportedByAudioPlayer, - isTypeSupportedByVideoPlayer, - videoTypes, - getVideoMimeType, -} from './media.service'; +import { audioTypes, isFileSizePreviewable, videoTypes, getVideoMimeType } from './media.service'; describe('videoTypes mapping', () => { it('should contain correct MIME for webm', () => { @@ -36,26 +29,6 @@ describe('audioTypes mapping', () => { }); }); -describe('isTypeSupportedByVideoPlayer', () => { - it('returns true for supported type', () => { - expect(isTypeSupportedByVideoPlayer('mp4')).toBe(true); - }); - - it('returns false for unsupported type', () => { - expect(isTypeSupportedByVideoPlayer('avi')).toBe(false); - }); -}); - -describe('isTypeSupportedByAudioPlayer', () => { - it('returns true for supported type', () => { - expect(isTypeSupportedByAudioPlayer('wav')).toBe(true); - }); - - it('returns false for unsupported type', () => { - expect(isTypeSupportedByAudioPlayer('aiff')).toBe(false); - }); -}); - describe('isFileSizePreviewable', () => { const limit = 512 * 1024 * 1024; diff --git a/src/services/media.service.ts b/src/services/media.service.ts index 065885f924..de5590671c 100644 --- a/src/services/media.service.ts +++ b/src/services/media.service.ts @@ -26,14 +26,6 @@ export const audioTypes: Partial = { weba: 'audio/webm', }; -export function isTypeSupportedByVideoPlayer(type: keyof VideoExtensions): boolean { - return Object.keys(videoTypes).includes(type); -} - -export function isTypeSupportedByAudioPlayer(type: keyof AudioExtensions): boolean { - return Object.keys(audioTypes).includes(type); -} - const HALF_A_GIGABYTE_IN_BYTES = 512 * 1024 * 1024; export function isFileSizePreviewable(size: number): boolean { return size < HALF_A_GIGABYTE_IN_BYTES; diff --git a/src/services/number.service.ts b/src/services/number.service.ts deleted file mode 100644 index 40d07208de..0000000000 --- a/src/services/number.service.ts +++ /dev/null @@ -1,9 +0,0 @@ -function hasDecimals(value: number): boolean { - return value - Math.floor(value) !== 0; -} - -const numberService = { - hasDecimals, -}; - -export default numberService; diff --git a/src/services/oauth.service.ts b/src/services/oauth.service.ts index f25f6dff54..d0558a331b 100644 --- a/src/services/oauth.service.ts +++ b/src/services/oauth.service.ts @@ -60,14 +60,6 @@ export interface OAuthSuccessMessage { payload: OAuthSuccessPayload; } -/** - * Error message structure - */ -export interface OAuthErrorMessage { - type: OAuthMessageType.ERROR; - error: string; -} - /** * Gets the target origin for postMessage based on the opener's origin * diff --git a/src/services/polling.service.ts b/src/services/polling.service.ts deleted file mode 100644 index 1dad06c578..0000000000 --- a/src/services/polling.service.ts +++ /dev/null @@ -1,10 +0,0 @@ -const pollingService = { - create(fn: () => void, period: number): NodeJS.Timeout { - return setInterval(fn, period); - }, - destroy(interval: NodeJS.Timeout): void { - clearInterval(interval); - }, -}; - -export default pollingService; diff --git a/src/services/user.service.test.ts b/src/services/user.service.test.ts index a0a3131a51..2cbaa1b522 100644 --- a/src/services/user.service.test.ts +++ b/src/services/user.service.test.ts @@ -52,13 +52,6 @@ describe('userService', () => { vi.spyOn(localStorageService, 'get').mockReturnValue(testToken); }); - it('should send a deactivation email', async () => { - authClientMock.sendUserDeactivationEmail.mockResolvedValue({ success: true }); - const result = await userService.sendDeactivationEmail(); - expect(result).toEqual({ success: true }); - expect(authClientMock.sendUserDeactivationEmail).toHaveBeenCalledWith(testToken); - }); - it('should pre-create user', async () => { usersClientMock.preRegister.mockResolvedValue('mockPreCreate'); const response = await userService.preCreateUser(testEmail); diff --git a/src/services/user.service.ts b/src/services/user.service.ts index 2292924ae9..b5b5285021 100644 --- a/src/services/user.service.ts +++ b/src/services/user.service.ts @@ -11,12 +11,6 @@ import localStorageService from 'services/local-storage.service'; import { SdkFactory } from 'app/core/factory/sdk'; import { generateCaptchaToken } from 'utils'; -export const sendDeactivationEmail = (): Promise => { - const authClient = SdkFactory.getNewApiInstance().createAuthClient(); - const token = localStorageService.get('xNewToken') ?? undefined; - return authClient.sendUserDeactivationEmail(token); -}; - const preCreateUser = (email: string): Promise => { const usersClient = SdkFactory.getNewApiInstance().createUsersClient(); return usersClient.preRegister(email); @@ -107,7 +101,6 @@ const sendIncompleteCheckout = async (completeCheckoutUrl: string, planName: str }; const userService = { - sendDeactivationEmail, updateUserProfile, updateUserAvatar, deleteUserAvatar, diff --git a/src/services/workspace.service.test.ts b/src/services/workspace.service.test.ts index caa797abf6..232972fe4b 100644 --- a/src/services/workspace.service.test.ts +++ b/src/services/workspace.service.test.ts @@ -34,7 +34,6 @@ const mockWorkspacesClient = { createFileEntry: vi.fn(), createFolder: vi.fn(), getWorkspaceCredentials: vi.fn(), - changeUserRole: vi.fn(), getWorkspacePendingInvitations: vi.fn(), getPersonalTrash: vi.fn(), validateWorkspaceInvitation: vi.fn(), @@ -54,7 +53,6 @@ const mockWorkspacesClient = { getMemberUsage: vi.fn(), modifyMemberUsage: vi.fn(), getWorkspace: vi.fn(), - getWorkspaceUsage: vi.fn(), leaveWorkspace: vi.fn(), getWorkspaceLogs: vi.fn(), }; @@ -305,13 +303,6 @@ describe('workspace service', () => { mockIds.memberId, ); }); - - it('should change user role', async () => { - const roleData = { teamId: mockIds.teamId, memberId: mockIds.memberId, role: 'admin' }; - mockWorkspacesClient.changeUserRole.mockResolvedValue(undefined); - await workspaceService.changeUserRole(roleData); - expect(mockWorkspacesClient.changeUserRole).toHaveBeenCalledWith(mockIds.teamId, mockIds.memberId, 'admin'); - }); }); describe('When managing files and folders', () => { @@ -487,13 +478,6 @@ describe('workspace service', () => { args: [mockIds.workspaceId], mockData: { used: 1024, total: 5120 }, }, - { - name: 'workspace usage', - fn: 'getWorkspaceUsage', - clientFn: 'getWorkspaceUsage', - args: [mockIds.workspaceId], - mockData: { totalWorkspaceSpace: 10240, spaceAssigned: 5120, spaceUsed: 2048 }, - }, ])('should retrieve $name', async ({ fn, clientFn, args, mockData }) => { mockWorkspacesClient[clientFn].mockResolvedValue(mockData); const result = await workspaceService[fn](...args); @@ -506,13 +490,6 @@ describe('workspace service', () => { const result = await workspaceService.modifyMemberUsage(mockIds.workspaceId, mockIds.memberId, 10240); expect(result).toEqual(mockData); }); - - it('should handle errors when retrieving workspace usage fails', async () => { - await testErrorHandling( - () => workspaceService.getWorkspaceUsage(mockIds.workspaceId), - mockWorkspacesClient.getWorkspaceUsage, - ); - }); }); describe('When retrieving workspace logs', () => { diff --git a/src/services/workspace.service.ts b/src/services/workspace.service.ts index 8608ff4d48..d3a3448fff 100644 --- a/src/services/workspace.service.ts +++ b/src/services/workspace.service.ts @@ -210,21 +210,6 @@ export function getWorkspaceCredentials(workspaceId: string): Promise { - const workspaceClient = SdkFactory.getNewApiInstance().createWorkspacesClient(); - return workspaceClient.changeUserRole(teamId, memberId, role).catch((error) => { - throw errorService.castError(error); - }); -} - export function getWorkspacePendingInvitations( workspaceId: string, limit: number, @@ -421,15 +406,6 @@ export function getWorkspace(workspaceId: string): Promise { }); } -export function getWorkspaceUsage( - workspaceId: string, -): Promise<{ totalWorkspaceSpace: number; spaceAssigned: number; spaceUsed: number }> { - const workspaceClient = SdkFactory.getNewApiInstance().createWorkspacesClient(); - return workspaceClient.getWorkspaceUsage(workspaceId).catch((error) => { - throw errorService.castError(error); - }); -} - export function leaveWorkspace(workspaceId: string): Promise { const workspaceClient = SdkFactory.getNewApiInstance().createWorkspacesClient(); return workspaceClient.leaveWorkspace(workspaceId).catch((error) => { @@ -481,7 +457,6 @@ const workspacesService = { addTeamUser, removeTeamUser, changeTeamManager, - changeUserRole, processInvitation, createFileEntry, createFolder, diff --git a/src/views/Backups/components/DeviceDropdownActions.tsx b/src/views/Backups/components/DeviceDropdownActions.tsx deleted file mode 100644 index 3345e54af0..0000000000 --- a/src/views/Backups/components/DeviceDropdownActions.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import React, { MouseEvent, ReactNode } from 'react'; -import UilTrashAlt from '@iconscout/react-unicons/icons/uil-trash-alt'; -import Dropdown from 'react-bootstrap/Dropdown'; -import { DriveItemAction } from 'views/Drive/components/DriveExplorer/types'; - -interface DeviceDropdownActionsProps { - title?: string; - hiddenActions?: DriveItemAction[]; - onDeleteButtonClicked: (e: MouseEvent) => void; -} - -class DeviceDropdownActions extends React.Component { - render(): ReactNode { - const { title } = this.props; - const hiddenActions = this.props.hiddenActions || []; - const isDeleteButtonHidden = hiddenActions.includes(DriveItemAction.Delete); - - return ( -
- {title ? {title} : null} - - {title &&
} - {isDeleteButtonHidden ? null : ( - - - Delete - - )} -
- ); - } -} - -export default DeviceDropdownActions; diff --git a/src/views/Backups/components/index.ts b/src/views/Backups/components/index.ts index 2eda4de258..a9613bbc7c 100644 --- a/src/views/Backups/components/index.ts +++ b/src/views/Backups/components/index.ts @@ -1,5 +1,4 @@ export { default as BackupsAsFoldersList } from './BackupsAsFoldersList'; -export { default as DeviceDropdownActions } from './DeviceDropdownActions'; export { default as DeviceList } from './DeviceList'; export { default as BackupListItem } from './BackupListItem'; export { default as DeleteBackupDialog } from './DeleteBackupDialog'; diff --git a/src/views/Backups/store/backupsSlice.ts b/src/views/Backups/store/backupsSlice.ts index e4d62a58e7..44b9534ef2 100644 --- a/src/views/Backups/store/backupsSlice.ts +++ b/src/views/Backups/store/backupsSlice.ts @@ -45,14 +45,6 @@ export const fetchDeviceBackupsThunk = createAsyncThunk( - 'backups/deleteBackup', - async (backup: DeviceBackup) => { - await backupsService.deleteBackup(backup); - return backup; - }, -); - export const deleteDeviceThunk = createAsyncThunk( 'backups/deleteDevice', async (device: Device) => { @@ -98,13 +90,6 @@ export const backupsSlice = createSlice({ state.isLoadingDeviceBackups = false; }); - builder - .addCase(deleteBackupThunk.pending, () => undefined) - .addCase(deleteBackupThunk.fulfilled, (state, action) => { - state.backups = state.backups.filter((b) => b.id !== action.payload.id); - }) - .addCase(deleteBackupThunk.rejected, () => undefined); - builder .addCase(deleteDeviceThunk.pending, () => undefined) .addCase(deleteDeviceThunk.fulfilled, (state, action) => { @@ -119,7 +104,6 @@ export const backupsActions = backupsSlice.actions; export const backupsThunks = { fetchDevicesThunk, fetchDeviceBackupsThunk, - deleteBackupThunk, deleteDeviceThunk, }; diff --git a/src/views/Checkout/services/payment.service.ts b/src/views/Checkout/services/payment.service.ts index 90439531b4..7bb6390df3 100644 --- a/src/views/Checkout/services/payment.service.ts +++ b/src/views/Checkout/services/payment.service.ts @@ -28,24 +28,6 @@ export interface CreatePaymentSessionPayload { canceledUrl?: string; } -export interface CreateTeamsPaymentSessionPayload { - test?: boolean; - mode: StripeSessionMode; - priceId: string; - quantity: number; - mnemonicTeam: string; - successUrl?: string; - canceledUrl?: string; -} - -export interface ValidateCheckoutSessionResponse { - valid: boolean; - customerId?: string; - planId: string; - userType?: UserType; - message?: string; -} - let stripe: Stripe; const paymentService = { diff --git a/src/views/Checkout/types/index.ts b/src/views/Checkout/types/index.ts index 6c6f49ae9a..fdf027f4ea 100644 --- a/src/views/Checkout/types/index.ts +++ b/src/views/Checkout/types/index.ts @@ -79,24 +79,8 @@ export type RequestedPlanData = DisplayPrice & { maximumSeats?: number; }; -// Checkout View Data -export type PlanData = { - selectedPlan: RequestedPlanData; - upsellPlan: RequestedPlanData; -}; - export type AuthMethodTypes = 'signUp' | 'signIn' | 'userIsSignedIn'; -export interface ClientSecretData { - clientSecretType: 'payment' | 'setup'; - client_secret: string; -} - -export interface PasswordStateProps { - tag: 'error' | 'warning' | 'success'; - label: string; -} - export interface CouponCodeData { codeId: string; codeName: string; @@ -104,12 +88,6 @@ export interface CouponCodeData { percentOff?: number; } -export interface ErrorStates { - authError: string; - stripeError: string; - couponError: string; -} - export type ErrorType = 'auth' | 'stripe' | 'coupon'; export type PartialErrorState = Partial>; diff --git a/src/views/Drive/components/DriveExplorer/components/DriveItemContextMenu.tsx b/src/views/Drive/components/DriveExplorer/components/DriveItemContextMenu.tsx index 4cc5c62ae4..3467b1b69e 100644 --- a/src/views/Drive/components/DriveExplorer/components/DriveItemContextMenu.tsx +++ b/src/views/Drive/components/DriveExplorer/components/DriveItemContextMenu.tsx @@ -280,18 +280,6 @@ const contextMenuDriveFolderShared = ({ ]; }; -const contextMenuMultipleSharedView = ({ - downloadItem, - moveToTrash, -}: { - downloadItem: (item: ListShareLinksItem) => void; - moveToTrash: (item: ListShareLinksItem) => void; -}): Array> => [ - getDownloadMenuItem(downloadItem), - { separator: true }, - getMoveToTrashMenuItem(moveToTrash), -]; - const contextMenuTrashItems = ({ openPreview, restoreItem, @@ -358,17 +346,6 @@ const contextMenuSelectedBackupItems = ({ }, ]; -const contextMenuDriveItemSharedsView = ({ - copyShareLink, - openShareAccessSettings, -}: { - copyShareLink: (item) => void; - openShareAccessSettings: (item) => void; -}): Array> => { - const shareLinkItems = [manageLinkAccessMenuItem(openShareAccessSettings), getCopyLinkMenuItem(copyShareLink)]; - return [...shareLinkItems]; -}; - const contextMenuDriveItemSharedAFS = ({ openPreview, showDetails, @@ -511,10 +488,8 @@ export { contextMenuDriveFolderSharedAFS, contextMenuDriveItemShared, contextMenuDriveItemSharedAFS, - contextMenuDriveItemSharedsView, contextMenuDriveNotSharedLink, contextMenuMultipleSelectedTrashItems, - contextMenuMultipleSharedView, contextMenuMultipleSharedViewAFS, contextMenuSelectedBackupItems, contextMenuSelectedItems, diff --git a/src/views/Drive/components/DriveListItemSkeleton.tsx b/src/views/Drive/components/DriveListItemSkeleton.tsx deleted file mode 100644 index 066fae5450..0000000000 --- a/src/views/Drive/components/DriveListItemSkeleton.tsx +++ /dev/null @@ -1,27 +0,0 @@ -import Skeleton from 'react-loading-skeleton'; - -const DriveListItemSkeleton = (): JSX.Element => { - return ( -
-
-
- -
-
- -
-
-
- -
-
- -
-
- -
-
- ); -}; - -export default DriveListItemSkeleton; diff --git a/src/views/Drive/components/index.ts b/src/views/Drive/components/index.ts index ba69c2ba8f..42cb0e676c 100644 --- a/src/views/Drive/components/index.ts +++ b/src/views/Drive/components/index.ts @@ -1,4 +1,3 @@ export { default as CreateFolderDialog } from './CreateFolderDialog'; export { default as DriveGridItemSkeleton } from './DriveGridItemSkeleton'; export { default as DriveItemDropdownActions } from './DriveItemDropdownActions'; -export { default as DriveListItemSkeleton } from './DriveListItemSkeleton'; diff --git a/src/views/Drive/hooks/useDriveExplorerItemHooks.tsx b/src/views/Drive/hooks/useDriveExplorerItemHooks.tsx deleted file mode 100644 index a6a2ca7dec..0000000000 --- a/src/views/Drive/hooks/useDriveExplorerItemHooks.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import useDriveItemStoreProps from './useDriveStoreProps'; -import useDriveItemActions from './useDriveItemActions'; -import { useDriveItemDrag, useDriveItemDrop } from './useDriveItemDragAndDrop'; - -const driveItemHooks = { - useDriveItemStoreProps, - useDriveItemActions, - useDriveItemDrag, - useDriveItemDrop, -}; - -export default driveItemHooks; diff --git a/src/views/NewSettings/components/Sections/Account/Plans/components/PlanSelection/PlanSelectionComponent.tsx b/src/views/NewSettings/components/Sections/Account/Plans/components/PlanSelection/PlanSelectionComponent.tsx index d40b3ee699..76434d01fd 100644 --- a/src/views/NewSettings/components/Sections/Account/Plans/components/PlanSelection/PlanSelectionComponent.tsx +++ b/src/views/NewSettings/components/Sections/Account/Plans/components/PlanSelection/PlanSelectionComponent.tsx @@ -1,15 +1,10 @@ -import { DisplayPrice, UserSubscription } from '@internxt/sdk/dist/drive/payments/types/types'; +import { DisplayPrice } from '@internxt/sdk/dist/drive/payments/types/types'; import PlanSelectionCard from './PlanSelectionCard'; import { bytesToString } from 'app/drive/services/size.service'; import { displayAmount } from '../../../../../../utils/planUtils'; import { PlanSelectionCardSkeleton } from './skeletons/PlanSelectionCardSkeleton'; import { currencyService } from 'views/Checkout/services'; -export interface UserSubscriptionProps { - individual: UserSubscription | null; - business: UserSubscription | null; -} - interface PlanSelectionComponentProps { pricesToRender: DisplayPrice[]; priceSelected: DisplayPrice; diff --git a/src/views/NewSettings/components/Sections/Workspace/Members/components/ActivityFilters.tsx b/src/views/NewSettings/components/Sections/Workspace/Members/components/ActivityFilters.tsx deleted file mode 100644 index b3d86fcac1..0000000000 --- a/src/views/NewSettings/components/Sections/Workspace/Members/components/ActivityFilters.tsx +++ /dev/null @@ -1,124 +0,0 @@ -import { useState, useRef, useEffect } from 'react'; -import { t } from 'i18next'; -import { FunnelSimple } from '@phosphor-icons/react'; - -import { Button, Checkbox, RadioButton } from '@internxt/ui'; - -interface ActivityFiltersProps { - isSelectedRoles: string[]; - setIsSelectedRoles: (selectedRoles) => void; -} - -const ActivityFilters = ({ isSelectedRoles, setIsSelectedRoles }: ActivityFiltersProps) => { - const roles = [ - { type: 'member', name: t('preferences.workspace.members.tabs.activity.roles.member') }, - { type: 'manager', name: t('preferences.workspace.members.tabs.activity.roles.manager') }, - { type: 'owner', name: t('preferences.workspace.members.tabs.activity.roles.owner') }, - ]; - - const dateRange = [ - { days: '7', name: t('preferences.workspace.members.tabs.activity.filter.dateRange.7days') }, - { days: '30', name: t('preferences.workspace.members.tabs.activity.filter.dateRange.30days') }, - { days: '90', name: t('preferences.workspace.members.tabs.activity.filter.dateRange.90days') }, - ]; - - const [isOpen, setIsOpen] = useState(false); - const [isFiltersModified, setIsFiltersModified] = useState(false); - const [rangeSelected, setRangeSelected] = useState('7'); - const filterDropdownRef = useRef(null); - - useEffect(() => { - document.addEventListener('mousedown', handleOutsideClick); - return () => { - document.removeEventListener('mousedown', handleOutsideClick); - }; - }); - - const handleOutsideClick = (e) => { - if (filterDropdownRef.current && !filterDropdownRef.current.contains(e.target)) { - setIsOpen(false); - } - }; - - const onFilteredRoles = (roleType) => { - const newSelectedRoles = [...isSelectedRoles]; - const roleIndex = newSelectedRoles.indexOf(roleType); - const isSelected = newSelectedRoles.includes(roleType); - - isSelected ? newSelectedRoles.splice(roleIndex, 1) : newSelectedRoles.push(roleType); - newSelectedRoles.length === 3 ? setIsFiltersModified(false) : setIsFiltersModified(true); - setIsSelectedRoles(newSelectedRoles); - }; - - return ( -
- -
-
-

- {t('preferences.workspace.members.tabs.activity.filter.title')} -

- -
-
-
-
{t('preferences.workspace.members.tabs.activity.roles.title')}
- {isFiltersModified &&
} -
-
- {roles.map((role) => { - const isSelected = isSelectedRoles.includes(role.type); - - return ( -
- onFilteredRoles(role.type)} /> -

{role.name}

-
- ); - })} -
-
-
-
-
- {t('preferences.workspace.members.tabs.activity.filter.dateRange.title')} -
-
-
- {dateRange.map((date) => { - const isSelected = rangeSelected === date.days; - - return ( -
- setRangeSelected(date.days)} /> -

{date.name}

-
- ); - })} -
-
-
-
- ); -}; - -export default ActivityFilters; diff --git a/src/views/NewSettings/components/Sections/Workspace/Members/components/ActivityTab.tsx b/src/views/NewSettings/components/Sections/Workspace/Members/components/ActivityTab.tsx deleted file mode 100644 index 812375f2fd..0000000000 --- a/src/views/NewSettings/components/Sections/Workspace/Members/components/ActivityTab.tsx +++ /dev/null @@ -1,88 +0,0 @@ -import { useState } from 'react'; -import { t } from 'i18next'; -import { ActivityTabProps } from '../../../../../types/types'; - -import EmptyTab from '../../../../EmptyTab'; - -import membersActivity from 'assets/icons/empty/members-activity.svg'; -import ActivityFilters from './ActivityFilters'; - -const ActivityTab = ({ role, isActivityEnabled, activity }: ActivityTabProps): JSX.Element => { - const isOwner = role === 'owner'; - const [isSelectedRoles, setIsSelectedRoles] = useState(['member', 'manager', 'owner']); - - const enableActivity = () => {}; - - return ( - <> - {!isActivityEnabled && isOwner && ( - - )} - - {!isActivityEnabled && !isOwner && ( - - )} - - {isActivityEnabled && ( -
-
-

- {t('preferences.workspace.members.tabs.activity.name')} -

- -
-
- {activity.map((day) => { - const records = day.records; - const lastRecord = records.slice(-1); - - return ( -
-

- {day.date} -

- {records.length > 0 ? ( - records.map((record) => { - return ( -
-
-

{record.title}

-

{record.description}

-
-

{record.time}

-
- ); - }) - ) : ( -
- {t('preferences.workspace.members.tabs.activity.empty')} -
- )} -
- ); - })} -
-
- )} - - ); -}; - -export default ActivityTab; diff --git a/src/views/NewSettings/components/Sections/Workspace/Members/components/TeamsTab.tsx b/src/views/NewSettings/components/Sections/Workspace/Members/components/TeamsTab.tsx deleted file mode 100644 index 519e5db46d..0000000000 --- a/src/views/NewSettings/components/Sections/Workspace/Members/components/TeamsTab.tsx +++ /dev/null @@ -1,77 +0,0 @@ -import { t } from 'i18next'; -import { TeamsTabProps } from '../../../../../types/types'; -import EmptyTab from '../../../../EmptyTab'; -import RoleBadge from './RoleBadge'; - -import membersTeams from 'assets/icons/empty/members-teams.svg'; - -const TeamsTab = ({ role, teams, isTeams }: TeamsTabProps): JSX.Element => { - const isOwner = role === 'owner'; - const isUserTeams = teams.length > 0; - - const createTeam = () => {}; - - return ( -
- {isOwner && !isTeams && ( - - )} - - {!isOwner && !isTeams && ( - - )} - - {isUserTeams && isTeams && ( - <> -
-

{t('preferences.workspace.members.tabs.teams.title')}

-

{t('preferences.workspace.members.tabs.teams.role')}

-
- {teams.map((team) => { - const isLastTeam = teams.length === teams.indexOf(team) + 1; - - return ( -
-

{team.team}

-

- -

-
- ); - })} - - )} - - {!isUserTeams && isTeams && ( -
-

- {t('preferences.workspace.members.tabs.teams.emptyTeams.title')} -

-
- )} -
- ); -}; - -export default TeamsTab; diff --git a/src/views/NewSettings/components/Sections/Workspace/Overview/components/UploadAvatarModal.tsx b/src/views/NewSettings/components/Sections/Workspace/Overview/components/UploadAvatarModal.tsx deleted file mode 100644 index 2b256bcff2..0000000000 --- a/src/views/NewSettings/components/Sections/Workspace/Overview/components/UploadAvatarModal.tsx +++ /dev/null @@ -1,152 +0,0 @@ -import { Image } from '@phosphor-icons/react'; -import { Suspense, useEffect, useRef, useState } from 'react'; -import AvatarEditor from 'react-avatar-editor'; -import { useTranslationContext } from 'app/i18n/provider/TranslationProvider'; -import { Button, Loader, Modal } from '@internxt/ui'; - -interface UploadAvatarModalProps { - isOpen: boolean; - onClose: () => void; - onUploadAvatarClicked: ({ avatar }: { avatar: Blob }) => Promise; - displayFileLimitMessage: () => void; - onSavingAvatarError: (error: unknown) => void; -} - -const UploadWorkspaceAvatarModal = ({ - isOpen, - onClose, - onUploadAvatarClicked, - displayFileLimitMessage, - onSavingAvatarError, -}: UploadAvatarModalProps) => { - const { translate } = useTranslationContext(); - const inputRef = useRef(null); - const editorRef = useRef(null); - const [state, setState] = useState< - { tag: 'empty' } | { tag: 'editing' | 'loading' | 'error'; source: File; zoom: number } - >({ tag: 'empty' }); - - useEffect(() => { - if (isOpen) setState({ tag: 'empty' }); - }, [isOpen]); - - const validateFile = (file: File) => { - if (file.size > 1024 * 1024 * 10) { - displayFileLimitMessage(); - } else { - setState({ tag: 'editing', source: file, zoom: 1 }); - } - }; - - const onInputChange = (e: React.ChangeEvent) => { - e.preventDefault(); - const file = e.target.files?.[0]; - - if (file) { - validateFile(file); - } - }; - - const onDrop = (e: React.DragEvent) => { - e.preventDefault(); - const file = e.dataTransfer.files[0]; - - if (file) { - validateFile(file); - } - }; - - const onSave = async () => { - if (state.tag === 'empty') return; - - setState({ ...state, tag: 'loading' }); - - try { - const avatarBlob = await new Promise((resolve, reject) => - editorRef.current - ?.getImageScaledToCanvas() - .toBlob((blob) => (blob ? resolve(blob) : reject(new Error('Error getting avatar image')))), - ); - - await onUploadAvatarClicked({ avatar: avatarBlob }); - - onClose(); - } catch (error) { - onSavingAvatarError(error); - } - }; - - return ( - -

{translate('views.account.avatar.title')}

-
- {state.tag === 'empty' ? ( - <> - - - - ) : ( -
- }> - -
- setState({ ...state, zoom: Number.parseFloat(e.target.value) })} - /> -
-
-
- )} -
-
-
- {state.tag === 'empty' ? ( - - ) : ( - - )} - {state.tag !== 'empty' && ( - - )} -
-
-
- ); -}; - -export default UploadWorkspaceAvatarModal; diff --git a/src/views/NewSettings/types/types.tsx b/src/views/NewSettings/types/types.tsx index 9e48733011..5d75290d91 100644 --- a/src/views/NewSettings/types/types.tsx +++ b/src/views/NewSettings/types/types.tsx @@ -1,4 +1,3 @@ -import { ReactNode } from 'react'; export interface SelectSectionProps { section: string; subsection?: string; @@ -23,70 +22,10 @@ export interface BillingDetailsCardProps { onEditButtonClick: () => void; } -export interface TabsProps { - tabs: TypeTabs; - activeTab: ActiveTab; - setActiveTab: (activeTab) => void; -} - -export interface ActivityTabProps { - role: MemberRole; - isActivityEnabled: boolean; - activity: Activity; -} - -export interface TeamsTabProps { - role: string; - teams: Teams; - isTeams: boolean; -} -export interface ActivityFiltersProps { - selectedRoles: string[]; - setIsSelectedRoles: (selectedRoles) => void; -} - export type DriveProduct = { name: string; usageInBytes: number; color: 'red' | 'orange' | 'yellow' | 'green' | 'pink' | 'indigo' | 'primary' | 'gray'; }; -export type Sections = Section[]; - export type MemberRole = 'owner' | 'manager' | 'member' | 'deactivated' | 'current' | 'planType'; - -export type Member = { - id: string; - name: string; - lastname: string; - email: string; - role: MemberRole; - storage: number; - products: DriveProduct[]; - isActivityEnabled: boolean; - activity: Activity; - isTeams: boolean; - teams: Teams; -}; - -export type Teams = { - team: string; - role: MemberRole; -}[]; - -export type ActiveTab = { - name: string; - tab: string; - view: ReactNode; -}; - -export type TypeTabs = ActiveTab[]; - -export type Activity = { - date: string; - records: { - title: string; - description: string; - time: string; - }[]; -}[]; diff --git a/src/views/Signup/components/SignupForm.tsx b/src/views/Signup/components/SignupForm.tsx index 4d82a4f7ca..cd4e7a6d67 100644 --- a/src/views/Signup/components/SignupForm.tsx +++ b/src/views/Signup/components/SignupForm.tsx @@ -34,8 +34,6 @@ type PasswordState = { label: string; }; -export type Views = 'signUp' | 'downloadBackupKey'; - function SignUpForm(): JSX.Element { const { translate } = useTranslationContext(); const [isValidPassword, setIsValidPassword] = useState(false); diff --git a/test/unit/services/pgp.service.test.ts b/test/unit/services/pgp.service.test.ts index c68e56cf0c..48e568ba3e 100644 --- a/test/unit/services/pgp.service.test.ts +++ b/test/unit/services/pgp.service.test.ts @@ -11,7 +11,6 @@ import { hybridEncryptMessageWithPublicKey, hybridDecryptMessageWithPrivateKey, comparePrivateKeyCiphertextIDs, - comparePublicKeyCiphertextIDs, compareKeyPairIDs, } from '../../../src/app/crypto/services/pgp.service'; @@ -253,7 +252,6 @@ describe('Encryption and Decryption', () => { const publicKey = await openpgp.readKey({ armoredKey: privateKeyArmored }); expect(comparePrivateKeyCiphertextIDs(privateKey, message)).toBeTruthy(); - expect(comparePublicKeyCiphertextIDs(publicKey, message)).toBeTruthy(); expect(compareKeyPairIDs(privateKey, publicKey)).toBeTruthy(); });