Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Farzin/R&D/80379/Extract cashier hooks into packages #6854

Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
c34bed0
feat(api): :sparkles: add `@deriv/api` package
Nov 4, 2022
1d739b2
feat(stores): :sparkles: add `@deriv/stores` package
Nov 4, 2022
8d8a4ca
feat(hooks): :sparkles: add `@deriv/hooks` package
Nov 4, 2022
03df02c
refactor(cashier): :fire: remove `hooks` from `cashier`
Nov 4, 2022
afbce6a
fix(cashier): :white_check_mark: fix tests
Nov 4, 2022
4765967
Merge branch 'master' into farzin/r&d/extract_cashier_hooks_into_pack…
Nov 4, 2022
f76c3f6
Merge branch 'develop' into farzin/r&d/extract_cashier_hooks_into_pac…
Nov 8, 2022
dc28a05
Merge branch 'develop' into farzin/r&d/extract_cashier_hooks_into_pac…
Nov 9, 2022
68fc5d1
Merge branch 'develop' into farzin/r&d/extract_cashier_hooks_into_pac…
Nov 10, 2022
ab267a1
Merge branch 'develop' into farzin/r&d/extract_cashier_hooks_into_pac…
Nov 11, 2022
c234a44
Merge branch 'develop' into farzin/r&d/extract_cashier_hooks_into_pac…
Nov 15, 2022
e1bd482
Merge branch 'develop' into farzin/r&d/extract_cashier_hooks_into_pac…
Nov 15, 2022
6e9e4a8
Merge branch 'develop' into farzin/r&d/extract_cashier_hooks_into_pac…
Nov 16, 2022
3393eb3
Merge branch 'develop' into farzin/r&d/extract_cashier_hooks_into_pac…
Nov 17, 2022
11a5787
Merge branch 'develop' into farzin/r&d/extract_cashier_hooks_into_pac…
Nov 21, 2022
2114a54
Merge branch 'develop' into farzin/r&d/extract_cashier_hooks_into_pac…
Nov 22, 2022
dab9407
Merge branch 'develop' into farzin/r&d/extract_cashier_hooks_into_pac…
Nov 23, 2022
e854c73
Merge branch 'develop' into farzin/r&d/extract_cashier_hooks_into_pac…
Nov 24, 2022
b44ad0b
Merge branch 'develop' into farzin/r&d/extract_cashier_hooks_into_pac…
Nov 26, 2022
3fe2b0c
Merge branch 'develop' into farzin/r&d/extract_cashier_hooks_into_pac…
Nov 29, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions packages/api/jest.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
const baseConfigForPackages = require('../../jest.config.base');

module.exports = {
...baseConfigForPackages,
};
16 changes: 16 additions & 0 deletions packages/api/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"name": "@deriv/api",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This package will be replaced by @deriv/deriv-api in the future as we move to TS and probably will have useWS and useSubscription hooks inside the @deriv/deriv-api package itself.

I've extracted useWS and useSubscription hooks from the cashier to this package so other packages can reuse these hooks.

"private": true,
"version": "1.0.0",
"main": "src/index.ts",
"dependencies": {
"@deriv/shared": "^1.0.0",
"react": "^16.14.0"
},
"devDependencies": {
"@deriv/api-types": "^1.0.54",
"@testing-library/user-event": "^13.2.1",
"@testing-library/react": "^12.0.0",
"typescript": "^4.6.3"
}
}
2 changes: 2 additions & 0 deletions packages/api/src/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export { default as useWS } from './useWS';
export { default as useSubscription } from './useSubscription';
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { TSocketRequestProps, TSocketResponseData, TSocketSubscribableEndpointNames } from 'Types';
import { TSocketRequestProps, TSocketResponseData, TSocketSubscribableEndpointNames } from '../types';
import { useWS as useWSShared } from '@deriv/shared';
import { useState } from 'react';

Expand All @@ -12,7 +12,7 @@ const useSubscription = <T extends TSocketSubscribableEndpointNames>(name: T) =>

// eslint-disable-next-line @typescript-eslint/no-explicit-any
const onData = (response: any) => {
setData(response[name]);
setData(response[name === 'ticks' ? 'tick' : name]);
setIsLoading(false);
};

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { useState } from 'react';
import { useWS as useWSShared } from '@deriv/shared';
import { TSocketEndpointNames, TSocketRequestProps, TSocketResponseData } from 'Types';
import { TSocketEndpointNames, TSocketRequestProps, TSocketResponseData } from '../types';

const useWS = <T extends TSocketEndpointNames>(name: T) => {
const [is_loading, setIsLoading] = useState(false);
Expand Down
10 changes: 10 additions & 0 deletions packages/api/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"paths": {
"@deriv/*": ["../*/src"]
},
"baseUrl": "./"
},
"include": ["src", "types.ts"]
}
126 changes: 126 additions & 0 deletions packages/api/types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
import type {
BalanceRequest,
BalanceResponse,
CashierInformationRequest,
CashierInformationResponse,
CryptocurrencyConfigurationsRequest,
CryptocurrencyConfigurationsResponse,
ExchangeRatesRequest,
ExchangeRatesResponse,
NewVirtualMoneyAccountRequest,
NewVirtualMoneyAccountResponse,
P2POrderInformationRequest,
P2POrderInformationResponse,
PaymentAgentDetailsRequest,
PaymentAgentDetailsResponse,
PaymentAgentListRequest,
PaymentAgentListResponse,
PaymentAgentTransferRequest,
PaymentAgentTransferResponse,
PaymentAgentWithdrawRequest,
PaymentAgentWithdrawResponse,
PingRequest,
PingResponse,
ServerStatusRequest,
ServerStatusResponse,
TermsAndConditionsApprovalRequest,
TermsAndConditionsApprovalResponse,
TicksStreamRequest,
TicksStreamResponse,
TransferBetweenAccountsRequest,
TransferBetweenAccountsResponse,
VerifyEmailRequest,
VerifyEmailResponse,
} from '@deriv/api-types';

export type TSocketEndpoints = {
ping: {
request: PingRequest;
response: PingResponse;
};
verify_email: {
request: VerifyEmailRequest;
response: VerifyEmailResponse;
};
exchange_rates: {
request: ExchangeRatesRequest;
response: ExchangeRatesResponse;
};
p2p_order_info: {
request: P2POrderInformationRequest;
response: P2POrderInformationResponse;
};
website_status: {
request: ServerStatusRequest;
response: ServerStatusResponse;
};
tnc_approval: {
request: TermsAndConditionsApprovalRequest;
response: TermsAndConditionsApprovalResponse;
};
cashier: {
request: CashierInformationRequest;
response: CashierInformationResponse;
};
crypto_config: {
request: CryptocurrencyConfigurationsRequest;
response: CryptocurrencyConfigurationsResponse;
};
paymentagent_transfer: {
request: PaymentAgentTransferRequest;
response: PaymentAgentTransferResponse;
};
paymentagent_list: {
request: PaymentAgentListRequest;
response: PaymentAgentListResponse;
};
paymentagent_details: {
request: PaymentAgentDetailsRequest;
response: PaymentAgentDetailsResponse;
};
paymentagent_withdraw: {
request: PaymentAgentWithdrawRequest;
response: PaymentAgentWithdrawResponse;
};
transfer_between_accounts: {
request: TransferBetweenAccountsRequest;
response: TransferBetweenAccountsResponse;
};
balance: {
request: BalanceRequest;
response: BalanceResponse;
};
ticks: {
request: TicksStreamRequest;
response: TicksStreamResponse;
};
new_account_virtual: {
request: NewVirtualMoneyAccountRequest;
response: NewVirtualMoneyAccountResponse;
};
};

export type TSocketEndpointNames = keyof TSocketEndpoints;

export type TSocketSubscribableEndpointNames =
| KeysMatching<TSocketEndpoints, { request: { subscribe?: number } }>
| 'exchange_rates';

export type TSocketResponse<T extends TSocketEndpointNames> = TSocketEndpoints[T]['response'];

export type TSocketResponseData<T extends TSocketEndpointNames> = TSocketResponse<T>[T extends 'ticks' ? 'tick' : T];

export type TSocketRequest<T extends TSocketEndpointNames> = TSocketEndpoints[T]['request'];

type TSocketRequestCleaned<T extends TSocketEndpointNames> = Omit<
TSocketRequest<T>,
(T extends KeysMatching<TSocketRequest<T>, 1> ? T : never) | 'passthrough' | 'req_id' | 'subscribe'
>;

export type TSocketRequestProps<T extends TSocketEndpointNames> = TSocketRequestCleaned<T> extends Record<string, never>
? never
: TSocketRequestCleaned<T>;

export type KeysMatching<T, V> = {
[K in keyof T]-?: T[K] extends V ? K : never;
}[keyof T];
10 changes: 10 additions & 0 deletions packages/cashier/@deriv-stores.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import type { TRootStore } from '@deriv/stores/types';
import type CashierStore from './src/stores/cashier-store';

declare module '@deriv/stores' {
export function useStore(): TRootStore & {
modules: {
cashier: CashierStore;
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Here we override the TRootStore type that is returned from the useStore hook to add CashierStore types to it.

In the future cashier will have its own stores scoped to cashier instead of putting them in the root store so we will be removing this part.

};
};
}
1 change: 1 addition & 0 deletions packages/cashier/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@
"@deriv/deriv-api": "^1.0.8",
"@deriv/p2p": "^0.7.3",
"@deriv/shared": "^1.0.0",
"@deriv/stores": "^1.0.0",
"@deriv/translations": "^1.0.0",
"classnames": "^2.2.6",
"formik": "^2.1.4",
Expand Down
2 changes: 1 addition & 1 deletion packages/cashier/src/app.jsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import React from 'react';
import { setWebsocket } from '@deriv/shared';
import { StoreProvider } from '@deriv/stores';
import { init } from 'Utils/server_time';
import Routes from 'Containers/routes';
import { MobxContentProvider } from 'Stores/connect';
import { StoreProvider } from './hooks';

const App = ({ passthrough: { WS, root_store } }) => {
React.useEffect(() => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,10 @@ import React, { useState } from 'react';
import { Button, ButtonLink, Clipboard, Dropdown, Icon, Loading, Text } from '@deriv/components';
import { localize, Localize } from '@deriv/translations';
import { CryptoConfig, getCurrencyName, isCryptocurrency, isMobile } from '@deriv/shared';
import { useStore } from '@deriv/stores';
import QRCode from 'qrcode.react';
import { observer } from 'mobx-react-lite';
import RecentTransaction from 'Components/recent-transaction';
import { useStore } from '../../../hooks';
import './crypto-deposit.scss';

const CryptoDeposit = () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
import React from 'react';
import { useHistory } from 'react-router-dom';
import { routes, WS } from '@deriv/shared';
import { Icon, Checklist, StaticUrl, Text } from '@deriv/components';
import { Localize, localize } from '@deriv/translations';
import { routes, WS } from '@deriv/shared';
import { useStore } from '@deriv/stores';
import { observer } from 'mobx-react-lite';
import CashierLocked from 'Components/cashier-locked';
import { useStore } from '../../../hooks';

const DepositLocked = () => {
const { client, modules } = useStore();
Expand Down
2 changes: 1 addition & 1 deletion packages/cashier/src/pages/deposit/deposit.tsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import React from 'react';
import { Loading } from '@deriv/components';
import { useStore } from '@deriv/stores';
import { observer } from 'mobx-react-lite';
import { Real, Virtual } from 'Components/cashier-container';
import { CashierOnboarding, CashierOnboardingSideNote } from 'Components/cashier-onboarding';
Expand All @@ -12,7 +13,6 @@ import RecentTransaction from 'Components/recent-transaction';
import CryptoDeposit from './crypto-deposit';
import DepositLocked from './deposit-locked';
import SideNote from 'Components/side-note';
import { useStore } from '../../hooks';

type TDeposit = {
setSideNotes: (notes: object | null) => void;
Expand Down
64 changes: 0 additions & 64 deletions packages/cashier/src/types/stores/client-store.types.ts

This file was deleted.

22 changes: 0 additions & 22 deletions packages/cashier/src/types/stores/common-store.types.ts

This file was deleted.

16 changes: 12 additions & 4 deletions packages/cashier/src/types/stores/index.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,12 @@
export * from './client-store.types';
export * from './common-store.types';
export * from './root-store.types';
export * from './ui-store.types';
import { TRootStore as TRootStoreBase } from '@deriv/stores/types';
import type CashierStore from '../../stores/cashier-store';

export type TRootStore = TRootStoreBase & {
modules: {
cashier: CashierStore;
};
};
Comment on lines +4 to +8
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same here, We override the TRootStore type from the @deriv/stores package to add CashierStore types to it.
Once we removed the connect method in cashier we will be able to remove this part.


export type TClientStore = TRootStore['client'];
export type TCommonStore = TRootStore['common'];
export type TUiStore = TRootStore['ui'];
Comment on lines +10 to +12
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Just re-exporting the types as they are used directly inside cashier components, Once we remove the connect method we can remove this part as well.

13 changes: 0 additions & 13 deletions packages/cashier/src/types/stores/root-store.types.ts

This file was deleted.

11 changes: 0 additions & 11 deletions packages/cashier/src/types/stores/ui-store.types.ts

This file was deleted.

2 changes: 1 addition & 1 deletion packages/cashier/tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,5 @@
"outDir": "./dist",
"baseUrl": "./"
},
"include": ["src"]
"include": ["src", "@deriv-stores.d.ts"]
}
Loading