Merge remote-tracking branch 'upstream/release/1.15.0' into fix-build-locale-types-fully

pull/3281/head
Audric Ackermann 4 months ago
commit ebdbf00d74
No known key found for this signature in database

@ -18,7 +18,7 @@ def get_localization_regex_list(string):
fr"i18n\('{key}'(, {{[\S\s.]*}})?\)", fr"i18n\('{key}'(, {{[\S\s.]*}})?\)",
fr"i18n\.(stripped|inEnglish|getRawMessage)\('{key}'(, {{[\S\s.]*}})?\)", fr"i18n\.(stripped|inEnglish|getRawMessage)\('{key}'(, {{[\S\s.]*}})?\)",
fr"window\?\.i18n\?\.\('{key}'(, {{[\S\s.]*}})?\)", fr"window\?\.i18n\?\.\('{key}'(, {{[\S\s.]*}})?\)",
fr"<StyledI18nSubText[\S\s.]*token=[\S\s.]*{key}[\S\s.]*" fr"<I18nSubText[\S\s.]*token=[\S\s.]*{key}[\S\s.]*"
] ]

@ -1,5 +1,5 @@
import styled from 'styled-components'; import styled from 'styled-components';
import { forwardRef } from 'react'; import { SessionDataTestId } from 'react';
import { Localizer } from './Localizer'; import { Localizer } from './Localizer';
import type { LocalizerComponentPropsObject } from '../../localization/localeTools'; import type { LocalizerComponentPropsObject } from '../../localization/localeTools';
@ -15,12 +15,18 @@ const StyledI18nSubTextContainer = styled('div')`
padding-inline: var(--margins-lg); padding-inline: var(--margins-lg);
`; `;
export const StyledI18nSubText = forwardRef<HTMLSpanElement, LocalizerComponentPropsObject>( export const I18nSubText = ({
({ className, ...props }) => { className,
dataTestId,
localizerProps,
}: {
className?: string;
dataTestId: SessionDataTestId;
localizerProps: LocalizerComponentPropsObject;
}) => {
return ( return (
<StyledI18nSubTextContainer className={className}> <StyledI18nSubTextContainer className={className} data-testid={dataTestId}>
<Localizer {...props} /> <Localizer {...localizerProps} />
</StyledI18nSubTextContainer> </StyledI18nSubTextContainer>
); );
} };
);

@ -1,5 +1,5 @@
// Audio Player // Audio Player
import { useEffect, useRef, useState } from 'react'; import { SessionDataTestId, useEffect, useRef, useState } from 'react';
import H5AudioPlayer, { RHAP_UI } from 'react-h5-audio-player'; import H5AudioPlayer, { RHAP_UI } from 'react-h5-audio-player';
import { useDispatch, useSelector } from 'react-redux'; import { useDispatch, useSelector } from 'react-redux';
import styled from 'styled-components'; import styled from 'styled-components';
@ -171,7 +171,7 @@ export const AudioPlayerWithEncryptedFile = (props: {
direction === 'incoming' direction === 'incoming'
? 'var(--message-bubbles-received-text-color)' ? 'var(--message-bubbles-received-text-color)'
: 'var(--message-bubbles-sent-text-color)'; : 'var(--message-bubbles-sent-text-color)';
const dataTestId = `audio-${messageId}`; const dataTestId: SessionDataTestId = 'audio-player';
const triggerPlayNextMessageIfNeeded = (endedMessageId: string) => { const triggerPlayNextMessageIfNeeded = (endedMessageId: string) => {
const justEndedMessageIndex = messageProps.findIndex( const justEndedMessageIndex = messageProps.findIndex(

@ -74,9 +74,11 @@ export const StagedLinkPreview = (props: Props) => {
justifyContent={isLoading ? 'center' : 'flex-start'} justifyContent={isLoading ? 'center' : 'flex-start'}
alignItems={'center'} alignItems={'center'}
> >
{isLoading ? <SessionSpinner loading={isLoading} /> : null} {isLoading ? (
<SessionSpinner loading={isLoading} data-testid="link-preview-loading" />
) : null}
{isLoaded && image && isContentTypeImage ? ( {isLoaded && image && isContentTypeImage ? (
<StyledImage> <StyledImage data-testid="link-preview-image">
<Image <Image
alt={AriaLabels.imageStagedLinkPreview} alt={AriaLabels.imageStagedLinkPreview}
attachment={image as any} attachment={image as any}
@ -87,7 +89,7 @@ export const StagedLinkPreview = (props: Props) => {
/> />
</StyledImage> </StyledImage>
) : null} ) : null}
{isLoaded ? <StyledText>{title}</StyledText> : null} {isLoaded ? <StyledText data-testid="link-preview-title">{title}</StyledText> : null}
</Flex> </Flex>
<SessionIconButton <SessionIconButton
iconType="exit" iconType="exit"
@ -98,6 +100,7 @@ export const StagedLinkPreview = (props: Props) => {
}} }}
margin={'0 var(--margins-sm) 0 0'} margin={'0 var(--margins-sm) 0 0'}
aria-label={window.i18n('close')} aria-label={window.i18n('close')}
dataTestId="link-preview-close"
style={{ style={{
position: isLoading ? 'absolute' : undefined, position: isLoading ? 'absolute' : undefined,
right: isLoading ? 'var(--margins-sm)' : undefined, right: isLoading ? 'var(--margins-sm)' : undefined,

@ -8,7 +8,7 @@ import { OpenUrlModalState, updateOpenUrlModal } from '../../state/ducks/modalDi
import { SessionWrapperModal } from '../SessionWrapperModal'; import { SessionWrapperModal } from '../SessionWrapperModal';
import { SessionButton, SessionButtonColor, SessionButtonType } from '../basic/SessionButton'; import { SessionButton, SessionButtonColor, SessionButtonType } from '../basic/SessionButton';
import { SpacerMD } from '../basic/Text'; import { SpacerMD } from '../basic/Text';
import { StyledI18nSubText } from '../basic/StyledI18nSubText'; import { I18nSubText } from '../basic/I18nSubText';
import { StyledModalDescriptionContainer } from './shared/ModalDescriptionContainer'; import { StyledModalDescriptionContainer } from './shared/ModalDescriptionContainer';
const StyledScrollDescriptionContainer = styled(StyledModalDescriptionContainer)` const StyledScrollDescriptionContainer = styled(StyledModalDescriptionContainer)`
@ -47,7 +47,10 @@ export function OpenUrlModal(props: OpenUrlModalState) {
> >
<div className="session-modal__centered"> <div className="session-modal__centered">
<StyledScrollDescriptionContainer> <StyledScrollDescriptionContainer>
<StyledI18nSubText token="urlOpenDescription" asTag="span" args={{ url }} /> <I18nSubText
localizerProps={{ token: 'urlOpenDescription', asTag: 'span', args: { url } }}
dataTestId="modal-description"
/>
</StyledScrollDescriptionContainer> </StyledScrollDescriptionContainer>
</div> </div>
<SpacerMD /> <SpacerMD />

@ -8,7 +8,7 @@ import { Flex } from '../basic/Flex';
import { SessionButton, SessionButtonColor, SessionButtonType } from '../basic/SessionButton'; import { SessionButton, SessionButtonColor, SessionButtonType } from '../basic/SessionButton';
import { SpacerLG, SpacerSM } from '../basic/Text'; import { SpacerLG, SpacerSM } from '../basic/Text';
import { SessionConfirmDialogProps } from './SessionConfirm'; import { SessionConfirmDialogProps } from './SessionConfirm';
import { StyledI18nSubText } from '../basic/StyledI18nSubText'; import { I18nSubText } from '../basic/I18nSubText';
const modalStyle: CSSProperties = { const modalStyle: CSSProperties = {
maxWidth: '300px', maxWidth: '300px',
@ -85,7 +85,7 @@ export const QuitModal = (props: SessionConfirmDialogProps) => {
style={modalStyle} style={modalStyle}
> >
<SpacerLG /> <SpacerLG />
<StyledI18nSubText {...i18nMessage}></StyledI18nSubText> <I18nSubText localizerProps={i18nMessage} dataTestId="modal-description" />
<SpacerLG /> <SpacerLG />
</Flex> </Flex>
) : null} ) : null}

@ -10,9 +10,8 @@ import { SessionButton, SessionButtonColor, SessionButtonType } from '../basic/S
import { SessionRadioGroup, SessionRadioItems } from '../basic/SessionRadioGroup'; import { SessionRadioGroup, SessionRadioItems } from '../basic/SessionRadioGroup';
import { SpacerLG } from '../basic/Text'; import { SpacerLG } from '../basic/Text';
import { SessionSpinner } from '../loading'; import { SessionSpinner } from '../loading';
import { StyledI18nSubText } from '../basic/StyledI18nSubText';
import type { LocalizerComponentPropsObject } from '../../localization/localeTools'; import type { LocalizerComponentPropsObject } from '../../localization/localeTools';
import { I18nSubText } from '../basic/I18nSubText';
export interface SessionConfirmDialogProps { export interface SessionConfirmDialogProps {
i18nMessage?: LocalizerComponentPropsObject; i18nMessage?: LocalizerComponentPropsObject;
@ -132,7 +131,7 @@ export const SessionConfirm = (props: SessionConfirmDialogProps) => {
<div className="session-modal__centered"> <div className="session-modal__centered">
{i18nMessage ? ( {i18nMessage ? (
<StyledI18nSubText {...i18nMessage} data-testid="modal-description" /> <I18nSubText localizerProps={i18nMessage} dataTestId="modal-description" />
) : null} ) : null}
{radioOptions && chosenOption !== '' ? ( {radioOptions && chosenOption !== '' ? (
<SessionRadioGroup <SessionRadioGroup

7
ts/react.d.ts vendored

@ -176,11 +176,18 @@ declare module 'react' {
| 'session-link-helpdesk' | 'session-link-helpdesk'
| 'session-faq-link' | 'session-faq-link'
// link preview (staged)
| 'link-preview-loading'
| 'link-preview-image'
| 'link-preview-title'
| 'link-preview-close'
// to sort // to sort
| 'restore-using-recovery' | 'restore-using-recovery'
| 'link-device' | 'link-device'
| 'join-community-conversation' | 'join-community-conversation'
| 'join-community-button' | 'join-community-button'
| 'audio-player'
| 'select-contact' | 'select-contact'
| 'contact' // this is way too generic | 'contact' // this is way too generic
| 'contact-status' | 'contact-status'

Loading…
Cancel
Save