mirror of
https://github.com/logto-io/logto.git
synced 2025-01-27 21:39:16 -05:00
chore: check connector related types and eliminate redundancy (#1925)
This commit is contained in:
parent
14cb0439e3
commit
31ecfd0b96
10 changed files with 28 additions and 29 deletions
|
@ -1,10 +1,10 @@
|
||||||
|
import { ConnectorMetadata } from '@logto/schemas';
|
||||||
import { fireEvent } from '@testing-library/react';
|
import { fireEvent } from '@testing-library/react';
|
||||||
import { MemoryRouter } from 'react-router-dom';
|
import { MemoryRouter } from 'react-router-dom';
|
||||||
|
|
||||||
import renderWithPageContext from '@/__mocks__/RenderWithPageContext';
|
import renderWithPageContext from '@/__mocks__/RenderWithPageContext';
|
||||||
import SettingsProvider from '@/__mocks__/RenderWithPageContext/SettingsProvider';
|
import SettingsProvider from '@/__mocks__/RenderWithPageContext/SettingsProvider';
|
||||||
import { socialConnectors } from '@/__mocks__/logto';
|
import { socialConnectors } from '@/__mocks__/logto';
|
||||||
import { ConnectorData } from '@/types';
|
|
||||||
|
|
||||||
import SocialSignInDropdown from '.';
|
import SocialSignInDropdown from '.';
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ const mockInvokeSocialSignIn = jest.fn();
|
||||||
|
|
||||||
// eslint-disable-next-line unicorn/consistent-function-scoping
|
// eslint-disable-next-line unicorn/consistent-function-scoping
|
||||||
jest.mock('@/hooks/use-social', () => () => ({
|
jest.mock('@/hooks/use-social', () => () => ({
|
||||||
invokeSocialSignIn: (connector: ConnectorData) => {
|
invokeSocialSignIn: (connector: ConnectorMetadata) => {
|
||||||
mockInvokeSocialSignIn(connector);
|
mockInvokeSocialSignIn(connector);
|
||||||
},
|
},
|
||||||
}));
|
}));
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
|
import { ConnectorMetadata } from '@logto/schemas';
|
||||||
import { getDefaultLanguage } from '@logto/shared';
|
import { getDefaultLanguage } from '@logto/shared';
|
||||||
import { useState, useCallback } from 'react';
|
import { useState, useCallback } from 'react';
|
||||||
import { useTranslation } from 'react-i18next';
|
import { useTranslation } from 'react-i18next';
|
||||||
|
|
||||||
import Dropdown, { DropdownItem } from '@/components/Dropdown';
|
import Dropdown, { DropdownItem } from '@/components/Dropdown';
|
||||||
import useSocial from '@/hooks/use-social';
|
import useSocial from '@/hooks/use-social';
|
||||||
import { ConnectorData } from '@/types';
|
|
||||||
|
|
||||||
import * as styles from './index.module.scss';
|
import * as styles from './index.module.scss';
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ type Props = {
|
||||||
anchorRef?: React.RefObject<HTMLElement>;
|
anchorRef?: React.RefObject<HTMLElement>;
|
||||||
isOpen: boolean;
|
isOpen: boolean;
|
||||||
onClose: () => void;
|
onClose: () => void;
|
||||||
connectors: ConnectorData[];
|
connectors: ConnectorMetadata[];
|
||||||
};
|
};
|
||||||
|
|
||||||
const SocialSignInDropdown = ({ isOpen, onClose, connectors, anchorRef }: Props) => {
|
const SocialSignInDropdown = ({ isOpen, onClose, connectors, anchorRef }: Props) => {
|
||||||
|
|
|
@ -1,17 +1,17 @@
|
||||||
|
import { ConnectorMetadata } from '@logto/schemas';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
|
|
||||||
import MoreSocialIcon from '@/assets/icons/more-social-icon.svg';
|
import MoreSocialIcon from '@/assets/icons/more-social-icon.svg';
|
||||||
import IconButton from '@/components/Button/IconButton';
|
import IconButton from '@/components/Button/IconButton';
|
||||||
import SocialIconButton from '@/components/Button/SocialIconButton';
|
import SocialIconButton from '@/components/Button/SocialIconButton';
|
||||||
import useSocial from '@/hooks/use-social';
|
import useSocial from '@/hooks/use-social';
|
||||||
import { ConnectorData } from '@/types';
|
|
||||||
import { isAppleConnector } from '@/utils/social-connectors';
|
import { isAppleConnector } from '@/utils/social-connectors';
|
||||||
|
|
||||||
import * as styles from './index.module.scss';
|
import * as styles from './index.module.scss';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
className?: string;
|
className?: string;
|
||||||
connectors?: ConnectorData[];
|
connectors?: ConnectorMetadata[];
|
||||||
hasMore?: boolean;
|
hasMore?: boolean;
|
||||||
moreButtonRef: React.RefObject<HTMLButtonElement>;
|
moreButtonRef: React.RefObject<HTMLButtonElement>;
|
||||||
onMoreButtonClick?: () => void;
|
onMoreButtonClick?: () => void;
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
import { ConnectorMetadata } from '@logto/schemas';
|
||||||
import classNames from 'classnames';
|
import classNames from 'classnames';
|
||||||
import { useState, useMemo } from 'react';
|
import { useState, useMemo } from 'react';
|
||||||
|
|
||||||
|
@ -5,7 +6,6 @@ import ExpandIcon from '@/assets/icons/expand-icon.svg';
|
||||||
import IconButton from '@/components/Button/IconButton';
|
import IconButton from '@/components/Button/IconButton';
|
||||||
import SocialLinkButton from '@/components/Button/SocialLinkButton';
|
import SocialLinkButton from '@/components/Button/SocialLinkButton';
|
||||||
import useSocial from '@/hooks/use-social';
|
import useSocial from '@/hooks/use-social';
|
||||||
import { ConnectorData } from '@/types';
|
|
||||||
|
|
||||||
import * as styles from './index.module.scss';
|
import * as styles from './index.module.scss';
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ export const defaultSize = 4;
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
className?: string;
|
className?: string;
|
||||||
socialConnectors?: ConnectorData[];
|
socialConnectors?: ConnectorMetadata[];
|
||||||
isCollapseEnabled?: boolean;
|
isCollapseEnabled?: boolean;
|
||||||
onSocialSignInCallback?: () => void;
|
onSocialSignInCallback?: () => void;
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
|
import { ConnectorMetadata } from '@logto/schemas';
|
||||||
|
|
||||||
import Drawer from '@/components/Drawer';
|
import Drawer from '@/components/Drawer';
|
||||||
import { ConnectorData } from '@/types';
|
|
||||||
|
|
||||||
import SocialSignInList from '../SocialSignInList';
|
import SocialSignInList from '../SocialSignInList';
|
||||||
|
|
||||||
type Props = {
|
type Props = {
|
||||||
connectors?: ConnectorData[];
|
connectors?: ConnectorMetadata[];
|
||||||
className?: string;
|
className?: string;
|
||||||
isOpen?: boolean;
|
isOpen?: boolean;
|
||||||
onClose: () => void;
|
onClose: () => void;
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
|
import { ConnectorMetadata } from '@logto/schemas';
|
||||||
import { useCallback, useContext } from 'react';
|
import { useCallback, useContext } from 'react';
|
||||||
|
|
||||||
import { invokeSocialSignIn } from '@/apis/social';
|
import { invokeSocialSignIn } from '@/apis/social';
|
||||||
import { ConnectorData } from '@/types';
|
|
||||||
import { getLogtoNativeSdk, isNativeWebview } from '@/utils/native-sdk';
|
import { getLogtoNativeSdk, isNativeWebview } from '@/utils/native-sdk';
|
||||||
import { generateState, storeState, buildSocialLandingUri } from '@/utils/social-connectors';
|
import { generateState, storeState, buildSocialLandingUri } from '@/utils/social-connectors';
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ const useSocial = () => {
|
||||||
|
|
||||||
const { run: asyncInvokeSocialSignIn } = useApi(invokeSocialSignIn);
|
const { run: asyncInvokeSocialSignIn } = useApi(invokeSocialSignIn);
|
||||||
|
|
||||||
const nativeSignInHandler = useCallback((redirectTo: string, connector: ConnectorData) => {
|
const nativeSignInHandler = useCallback((redirectTo: string, connector: ConnectorMetadata) => {
|
||||||
const { id: connectorId, platform } = connector;
|
const { id: connectorId, platform } = connector;
|
||||||
|
|
||||||
const redirectUri =
|
const redirectUri =
|
||||||
|
@ -30,7 +30,7 @@ const useSocial = () => {
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const invokeSocialSignInHandler = useCallback(
|
const invokeSocialSignInHandler = useCallback(
|
||||||
async (connector: ConnectorData) => {
|
async (connector: ConnectorMetadata) => {
|
||||||
if (!(await termsValidation())) {
|
if (!(await termsValidation())) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
import { SignInMode } from '@logto/schemas';
|
import { SignInMode, ConnectorMetadata } from '@logto/schemas';
|
||||||
|
|
||||||
import Divider from '@/components/Divider';
|
import Divider from '@/components/Divider';
|
||||||
import TextLink from '@/components/TextLink';
|
import TextLink from '@/components/TextLink';
|
||||||
|
@ -8,7 +8,7 @@ import SignInMethodsLink from '@/containers/SignInMethodsLink';
|
||||||
import { PrimarySocialSignIn, SecondarySocialSignIn } from '@/containers/SocialSignIn';
|
import { PrimarySocialSignIn, SecondarySocialSignIn } from '@/containers/SocialSignIn';
|
||||||
import TermsOfUse from '@/containers/TermsOfUse';
|
import TermsOfUse from '@/containers/TermsOfUse';
|
||||||
import UsernameSignin from '@/containers/UsernameSignin';
|
import UsernameSignin from '@/containers/UsernameSignin';
|
||||||
import { SignInMethod, LocalSignInMethod, ConnectorData } from '@/types';
|
import { SignInMethod, LocalSignInMethod } from '@/types';
|
||||||
|
|
||||||
import * as styles from './index.module.scss';
|
import * as styles from './index.module.scss';
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ export const PrimarySection = ({
|
||||||
signInMode,
|
signInMode,
|
||||||
}: {
|
}: {
|
||||||
signInMethod?: SignInMethod;
|
signInMethod?: SignInMethod;
|
||||||
socialConnectors?: ConnectorData[];
|
socialConnectors?: ConnectorMetadata[];
|
||||||
signInMode?: SignInMode;
|
signInMode?: SignInMode;
|
||||||
}) => {
|
}) => {
|
||||||
switch (signInMethod) {
|
switch (signInMethod) {
|
||||||
|
@ -61,7 +61,7 @@ export const SecondarySection = ({
|
||||||
}: {
|
}: {
|
||||||
primarySignInMethod?: SignInMethod;
|
primarySignInMethod?: SignInMethod;
|
||||||
secondarySignInMethods?: SignInMethod[];
|
secondarySignInMethods?: SignInMethod[];
|
||||||
socialConnectors?: ConnectorData[];
|
socialConnectors?: ConnectorMetadata[];
|
||||||
}) => {
|
}) => {
|
||||||
if (!primarySignInMethod || !secondarySignInMethods?.length) {
|
if (!primarySignInMethod || !secondarySignInMethods?.length) {
|
||||||
return null;
|
return null;
|
||||||
|
|
|
@ -15,10 +15,8 @@ export type Platform = 'web' | 'mobile';
|
||||||
|
|
||||||
export type Theme = 'dark' | 'light';
|
export type Theme = 'dark' | 'light';
|
||||||
|
|
||||||
export type ConnectorData = ConnectorMetadata & { id: string };
|
|
||||||
|
|
||||||
export type SignInExperienceSettingsResponse = SignInExperience & {
|
export type SignInExperienceSettingsResponse = SignInExperience & {
|
||||||
socialConnectors: ConnectorData[];
|
socialConnectors: ConnectorMetadata[];
|
||||||
notification?: string;
|
notification?: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { ConnectorPlatform } from '@logto/schemas';
|
import { ConnectorPlatform, ConnectorMetadata } from '@logto/schemas';
|
||||||
|
|
||||||
import { ConnectorData, SearchParameters } from '@/types';
|
import { SearchParameters } from '@/types';
|
||||||
import { getLogtoNativeSdk, isNativeWebview } from '@/utils/native-sdk';
|
import { getLogtoNativeSdk, isNativeWebview } from '@/utils/native-sdk';
|
||||||
|
|
||||||
import {
|
import {
|
||||||
|
@ -16,7 +16,7 @@ const mockConnectors = [
|
||||||
{ platform: 'Universal', target: 'wechat' },
|
{ platform: 'Universal', target: 'wechat' },
|
||||||
{ platform: 'Native', target: 'wechat' },
|
{ platform: 'Native', target: 'wechat' },
|
||||||
{ platform: 'Native', target: 'alipay' },
|
{ platform: 'Native', target: 'alipay' },
|
||||||
] as ConnectorData[];
|
] as ConnectorMetadata[];
|
||||||
|
|
||||||
jest.mock('@/utils/native-sdk', () => ({
|
jest.mock('@/utils/native-sdk', () => ({
|
||||||
isNativeWebview: jest.fn(),
|
isNativeWebview: jest.fn(),
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
import { ConnectorPlatform } from '@logto/schemas';
|
import { ConnectorMetadata, ConnectorPlatform } from '@logto/schemas';
|
||||||
|
|
||||||
import { ConnectorData, SearchParameters } from '@/types';
|
import { SearchParameters } from '@/types';
|
||||||
import { generateRandomString } from '@/utils';
|
import { generateRandomString } from '@/utils';
|
||||||
import { getLogtoNativeSdk, isNativeWebview } from '@/utils/native-sdk';
|
import { getLogtoNativeSdk, isNativeWebview } from '@/utils/native-sdk';
|
||||||
|
|
||||||
|
@ -56,12 +56,12 @@ export const getCallbackLinkFromStorage = (connectorId: string) => {
|
||||||
/**
|
/**
|
||||||
* Social Connectors Filter Utility Methods
|
* Social Connectors Filter Utility Methods
|
||||||
*/
|
*/
|
||||||
export const filterSocialConnectors = (socialConnectors?: ConnectorData[]) => {
|
export const filterSocialConnectors = (socialConnectors?: ConnectorMetadata[]) => {
|
||||||
if (!socialConnectors) {
|
if (!socialConnectors) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
const connectorMap = new Map<string, ConnectorData>();
|
const connectorMap = new Map<string, ConnectorMetadata>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Browser Environment
|
* Browser Environment
|
||||||
|
@ -142,13 +142,13 @@ export const filterSocialConnectors = (socialConnectors?: ConnectorData[]) => {
|
||||||
*/
|
*/
|
||||||
export const filterPreviewSocialConnectors = (
|
export const filterPreviewSocialConnectors = (
|
||||||
platform: ConnectorPlatform.Native | ConnectorPlatform.Web,
|
platform: ConnectorPlatform.Native | ConnectorPlatform.Web,
|
||||||
socialConnectors?: ConnectorData[]
|
socialConnectors?: ConnectorMetadata[]
|
||||||
) => {
|
) => {
|
||||||
if (!socialConnectors) {
|
if (!socialConnectors) {
|
||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
const connectorMap = new Map<string, ConnectorData>();
|
const connectorMap = new Map<string, ConnectorMetadata>();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Browser Environment
|
* Browser Environment
|
||||||
|
|
Loading…
Add table
Reference in a new issue