Skip to content

Commit caacdb7

Browse files
authored
feat: text screen (#7355)
1 parent fc29665 commit caacdb7

File tree

36 files changed

+343
-53
lines changed

36 files changed

+343
-53
lines changed

apps/journeys-admin/__generated__/JourneyCustomizationDescriptionUpdate.ts

Lines changed: 24 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/journeys-admin/__generated__/JourneyCustomizationFieldUpdate.ts

Lines changed: 5 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/journeys-admin/__generated__/globalTypes.ts

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/journeys-admin/pages/journeys/[journeyId]/quick.tsx

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,19 @@ function JourneyQuickSettingsPage({ status }): ReactElement {
5151
{status === 'noAccess' ? (
5252
<AccessDenied />
5353
) : (
54-
<JourneyProvider value={{ journey: data?.journey, variant: 'admin' }}>
54+
<JourneyProvider
55+
value={{
56+
journey:
57+
data?.journey != null
58+
? {
59+
...data.journey,
60+
journeyCustomizationFields:
61+
(data.journey as any).journeyCustomizationFields ?? []
62+
}
63+
: undefined,
64+
variant: 'admin'
65+
}}
66+
>
5567
<EditorProvider>
5668
<JourneyQuickSettings displayName={displayName ?? undefined} />
5769
</EditorProvider>

apps/journeys-admin/pages/templates/[journeyId]/customize.tsx

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
import Typography from '@mui/material/Typography'
21
import { useRouter } from 'next/router'
32
import { withUser, withUserTokenSSR } from 'next-firebase-auth'
43
import { useTranslation } from 'next-i18next'
54
import { NextSeo } from 'next-seo'
65

76
import { GET_JOURNEY, useJourneyQuery } from '@core/journeys/ui/useJourneyQuery'
7+
import { JourneyProvider } from '@core/journeys/ui/JourneyProvider'
88

99
import {
1010
GetJourney,
@@ -22,13 +22,17 @@ function CustomizePage() {
2222
idType: IdType.databaseId
2323
})
2424

25-
const title = data?.journey?.title
26-
2725
return (
2826
<>
2927
<NextSeo title={t('Customize Template')} />
30-
<Typography variant="h1">{title}</Typography>
31-
<MultiStepForm />
28+
<JourneyProvider
29+
value={{
30+
journey: data?.journey,
31+
variant: 'admin'
32+
}}
33+
>
34+
<MultiStepForm />
35+
</JourneyProvider>
3236
</>
3337
)
3438
}

apps/journeys-admin/src/components/Editor/Editor.stories.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import {
88
} from '@core/journeys/ui/TemplateView/data'
99
import { journeysAdminConfig } from '@core/shared/ui/storybook'
1010

11-
import { GetJourney_journey as Journey } from '../../../__generated__/GetJourney'
11+
import { JourneyFields as Journey } from '@core/journeys/ui/JourneyProvider/__generated__/JourneyFields'
1212
import { GetStepBlocksWithPosition } from '../../../__generated__/GetStepBlocksWithPosition'
1313
import {
1414
JourneyStatus,
@@ -85,7 +85,8 @@ const journey: Journey = {
8585
menuButtonIcon: null,
8686
menuStepBlock: null,
8787
journeyTheme: null,
88-
journeyCustomizationDescription: null
88+
journeyCustomizationDescription: null,
89+
journeyCustomizationFields: []
8990
}
9091

9192
const mockGetStepBlocksWithPosition: MockedResponse<GetStepBlocksWithPosition> =

apps/journeys-admin/src/components/Editor/Slider/Settings/SocialDetails/SocialDetails.stories.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { JourneyProvider } from '@core/journeys/ui/JourneyProvider'
88
import { journeysAdminConfig } from '@core/shared/ui/storybook'
99

1010
import { BlockFields_ImageBlock as ImageBlock } from '../../../../../../__generated__/BlockFields'
11-
import { GetJourney_journey as Journey } from '../../../../../../__generated__/GetJourney'
11+
import { JourneyFields as Journey } from '@core/journeys/ui/JourneyProvider/__generated__/JourneyFields'
1212
import {
1313
JourneyStatus,
1414
ThemeMode,
@@ -77,7 +77,8 @@ const journey: Journey = {
7777
menuButtonIcon: null,
7878
menuStepBlock: null,
7979
journeyTheme: null,
80-
journeyCustomizationDescription: null
80+
journeyCustomizationDescription: null,
81+
journeyCustomizationFields: []
8182
}
8283

8384
const image: ImageBlock = {

apps/journeys-admin/src/components/Editor/Toolbar/Items/TemplateSettingsItem/TemplateSettingsDialog/AboutTabPanel/CustomizeTemplate/CustomizeTemplate.tsx

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,35 @@ export function CustomizeTemplate(): ReactElement {
2828
void setFieldValue('journeyCustomizationDescription', newValue)
2929
}
3030

31+
const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>): void => {
32+
if (event.key !== 'Tab') return
33+
34+
event.preventDefault()
35+
36+
const target = event.target as HTMLTextAreaElement | HTMLInputElement
37+
const currentValue = journeyCustomizationDescription ?? ''
38+
const selectionStart = target.selectionStart ?? currentValue.length
39+
const selectionEnd = target.selectionEnd ?? selectionStart
40+
41+
const SPECIAL_EM_SPACE = '\u2003'
42+
const updatedValue =
43+
currentValue.slice(0, selectionStart) +
44+
SPECIAL_EM_SPACE +
45+
currentValue.slice(selectionEnd)
46+
47+
void setFieldValue('journeyCustomizationDescription', updatedValue)
48+
49+
// Restore caret position after React re-renders the controlled value
50+
const newCaretPosition = selectionStart + SPECIAL_EM_SPACE.length
51+
requestAnimationFrame(() => {
52+
try {
53+
target.setSelectionRange(newCaretPosition, newCaretPosition)
54+
} catch {
55+
// noop if element is not focusable
56+
}
57+
})
58+
}
59+
3160
const handleRefresh = (): void => {
3261
const formattedCustomizationText = formatTemplateCustomizationString(
3362
getTemplateCustomizationFields(journey),
@@ -61,6 +90,7 @@ export function CustomizeTemplate(): ReactElement {
6190
multiline
6291
value={journeyCustomizationDescription}
6392
onChange={handleChange}
93+
onKeyDown={handleKeyDown}
6494
variant="outlined"
6595
/>
6696
</Box>

apps/journeys-admin/src/components/Editor/Toolbar/Items/TemplateSettingsItem/TemplateSettingsDialog/TemplateSettingsDialog.tsx

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ import { Dialog } from '@core/shared/ui/Dialog'
1616
import { TabPanel, tabA11yProps } from '@core/shared/ui/TabPanel'
1717

1818
import { JourneyFeature } from '../../../../../../../__generated__/JourneyFeature'
19-
import { JourneyCustomizationFieldUpdate } from '../../../../../../../__generated__/JourneyCustomizationFieldUpdate'
19+
import { JourneyCustomizationDescriptionUpdate } from '../../../../../../../__generated__/JourneyCustomizationDescriptionUpdate'
2020
import { useJourneyUpdateMutation } from '../../../../../../libs/useJourneyUpdateMutation'
2121

2222
import { AboutTabPanel } from './AboutTabPanel'
@@ -35,8 +35,11 @@ export const JOURNEY_FEATURE_UPDATE = gql`
3535
}
3636
`
3737

38-
export const JOURNEY_CUSTOMIZATION_FIELD_UPDATE = gql`
39-
mutation JourneyCustomizationFieldUpdate($journeyId: ID!, $string: String!) {
38+
export const JOURNEY_CUSTOMIZATION_DESCRIPTION_UPDATE = gql`
39+
mutation JourneyCustomizationDescriptionUpdate(
40+
$journeyId: ID!
41+
$string: String!
42+
) {
4043
journeyCustomizationFieldPublisherUpdate(
4144
journeyId: $journeyId
4245
string: $string
@@ -63,9 +66,9 @@ export function TemplateSettingsDialog({
6366
const { journey } = useJourney()
6467
const [journeySettingsUpdate] = useJourneyUpdateMutation()
6568
const [journeyFeature] = useMutation<JourneyFeature>(JOURNEY_FEATURE_UPDATE)
66-
const [journeyCustomizationFieldUpdate] =
67-
useMutation<JourneyCustomizationFieldUpdate>(
68-
JOURNEY_CUSTOMIZATION_FIELD_UPDATE
69+
const [journeyCustomizationDescriptionUpdate] =
70+
useMutation<JourneyCustomizationDescriptionUpdate>(
71+
JOURNEY_CUSTOMIZATION_DESCRIPTION_UPDATE
6972
)
7073
const { enqueueSnackbar } = useSnackbar()
7174

@@ -128,7 +131,7 @@ export function TemplateSettingsDialog({
128131
}
129132
}
130133
})
131-
await journeyCustomizationFieldUpdate({
134+
await journeyCustomizationDescriptionUpdate({
132135
variables: {
133136
journeyId: journey.id,
134137
string: values.journeyCustomizationDescription

apps/journeys-admin/src/components/TemplateCustomization/MultiStepForm/MultiStepForm.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export function MultiStepForm(): ReactElement {
5252
<Container
5353
maxWidth="lg"
5454
sx={{
55-
height: '100svh',
55+
height: '100%',
5656
width: '100%',
5757
backgroundColor: 'background.paper'
5858
}}

0 commit comments

Comments
 (0)