Skip to content

Commit 5584b9b

Browse files
committed
refactor: move static options out of config (for content)
1 parent 436d889 commit 5584b9b

File tree

4 files changed

+60
-38
lines changed

4 files changed

+60
-38
lines changed

frontend/app/components/redesign/components/BuilderForm.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@ import {
77
import { toolState, toolActions, type StableKey } from '~/stores/toolStore'
88
import { useUI } from '~/stores/uiStore'
99
import { useSnapshot } from 'valtio'
10-
import type { ToolContent } from './ContentBuilder'
10+
import type { ContentOptions, ToolContent } from './ContentBuilder'
1111
import type { ToolAppearance } from './AppearanceBuilder'
1212

1313
interface BuilderFormProps {
1414
config: ToolContent | ToolAppearance
15+
options: ContentOptions
1516
toolName: 'widget' | 'banner'
1617
onRefresh: (section: 'appearance' | 'content') => void
1718
onBuildStepComplete?: (isComplete: boolean) => void
@@ -23,6 +24,7 @@ export const BuilderForm: React.FC<BuilderFormProps> = ({
2324
onBuildStepComplete,
2425
onRefresh,
2526
config,
27+
options,
2628
toolName,
2729
positionSelector,
2830
colorsSelector
@@ -74,6 +76,7 @@ export const BuilderForm: React.FC<BuilderFormProps> = ({
7476
<ContentBuilder
7577
onRefresh={() => onRefresh('content')}
7678
config={config as ToolContent}
79+
options={options}
7780
/>
7881
<AppearanceBuilder
7982
onRefresh={() => onRefresh('appearance')}

frontend/app/components/redesign/components/ContentBuilder.tsx

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,19 @@ import { BuilderAccordion } from './BuilderAccordion'
44
import { TextareaField, Divider, Checkbox } from '@/components'
55
import { TitleInput } from './builder/TitleInput'
66

7-
export interface ToolContent {
7+
export interface ContentOptions {
88
suggestedTitles: string[]
9+
910
titleHelpText: string
1011
titleMaxLength: number
12+
1113
messageLabel: string
1214
messagePlaceholder: string
1315
messageHelpText: string
1416
messageMaxLength: number
17+
}
1518

19+
export interface ToolContent {
1620
currentTitle: string
1721
currentMessage: string
1822
isDescriptionVisible: boolean
@@ -25,11 +29,13 @@ export interface ToolContent {
2529

2630
interface ContentBuilderProps {
2731
config: ToolContent
32+
options: ContentOptions
2833
onRefresh: () => void
2934
}
3035

3136
export const ContentBuilder: React.FC<ContentBuilderProps> = ({
3237
config,
38+
options,
3339
onRefresh
3440
}) => {
3541
const titleInputRef = useRef<HTMLInputElement>(null)
@@ -75,16 +81,16 @@ export const ContentBuilder: React.FC<ContentBuilderProps> = ({
7581
<TitleInput
7682
value={config.currentTitle}
7783
onChange={config.onTitleChange}
78-
suggestions={config.suggestedTitles}
79-
maxLength={config.titleMaxLength}
80-
helpText={config.titleHelpText}
84+
suggestions={options.suggestedTitles}
85+
maxLength={options.titleMaxLength}
86+
helpText={options.titleHelpText}
8187
/>
8288

8389
<Divider />
8490

8591
<div className="flex flex-col gap-xs">
8692
<h4 className="text-base leading-md font-bold text-text-primary">
87-
{config.messageLabel}
93+
{options.messageLabel}
8894
</h4>
8995
<div className="flex gap-lg items-start xl:flex-row flex-col">
9096
<div className="flex items-center gap-xs shrink-0">
@@ -105,11 +111,11 @@ export const ContentBuilder: React.FC<ContentBuilderProps> = ({
105111
config.onMessageChange(e.target.value)
106112
}}
107113
currentLength={config.currentMessage.length || 0}
108-
maxLength={config.messageMaxLength}
114+
maxLength={options.messageMaxLength}
109115
showCounter={true}
110-
helpText={config.messageHelpText}
116+
helpText={options.messageHelpText}
111117
className="h-[84px]"
112-
placeholder={config.messagePlaceholder}
118+
placeholder={options.messagePlaceholder}
113119
disabled={!isMessageVisible}
114120
/>
115121
</div>

frontend/app/routes/banner.tsx

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@ import { commitSession, getSession } from '~/utils/session.server.js'
4242
import { useBodyClass } from '~/hooks/useBodyClass'
4343
import { SVGSpinner } from '@/assets'
4444
import type { BannerConfig, Banner as BannerComponent } from '@tools/components'
45-
import type { ToolContent } from '~/components/redesign/components/ContentBuilder'
45+
import type {
46+
ContentOptions,
47+
ToolContent
48+
} from '~/components/redesign/components/ContentBuilder'
4649
import type { BannerToolAppearance } from '~/components/redesign/components/AppearanceBuilder'
4750
import { BANNER_FONT_SIZES } from '@shared/types'
4851
import type {
@@ -177,6 +180,22 @@ const BannerPreview = React.forwardRef<BannerHandle>((props, ref) => {
177180

178181
BannerPreview.displayName = 'BannerPreview'
179182

183+
const contentOptions: ContentOptions = {
184+
suggestedTitles: [
185+
'How to support?',
186+
'Fund me',
187+
'Pay as you browse',
188+
'Easy donate',
189+
'Support my work'
190+
],
191+
titleHelpText: 'Strong message to help people engage with Web Monetization',
192+
titleMaxLength: 60,
193+
messageLabel: 'Banner message',
194+
messagePlaceholder: 'Enter your banner message...',
195+
messageHelpText: 'Strong message to help people engage with Web Monetization',
196+
messageMaxLength: 300
197+
}
198+
180199
export default function Banner() {
181200
const snap = useSnapshot(toolState)
182201
const { actions: uiActions } = useUI()
@@ -190,20 +209,6 @@ export default function Banner() {
190209
usePathTracker()
191210

192211
const config: ToolContent | BannerToolAppearance = {
193-
suggestedTitles: [
194-
'How to support?',
195-
'Fund me',
196-
'Pay as you browse',
197-
'Easy donate',
198-
'Support my work'
199-
],
200-
titleHelpText: 'Strong message to help people engage with Web Monetization',
201-
titleMaxLength: 60,
202-
messageLabel: 'Banner message',
203-
messagePlaceholder: 'Enter your banner message...',
204-
messageHelpText:
205-
'Strong message to help people engage with Web Monetization',
206-
messageMaxLength: 300,
207212
currentTitle: snap.currentConfig?.bannerTitleText,
208213
currentMessage: snap.currentConfig?.bannerDescriptionText,
209214
isDescriptionVisible: snap.currentConfig?.bannerDescriptionVisible ?? true,
@@ -389,6 +394,7 @@ export default function Banner() {
389394
<BuilderForm
390395
toolName="banner"
391396
config={config}
397+
options={contentOptions}
392398
onBuildStepComplete={(isComplete) =>
393399
toolActions.setBuildCompleteStep(
394400
isComplete ? 'filled' : 'unfilled'

frontend/app/routes/widget.tsx

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ import type {
3939
WidgetConfig,
4040
PaymentWidget as WidgetComponent
4141
} from '@tools/components'
42-
import type { ToolContent } from '~/components/redesign/components/ContentBuilder'
42+
import type {
43+
ContentOptions,
44+
ToolContent
45+
} from '~/components/redesign/components/ContentBuilder'
4346
import type { WidgetToolAppearance } from '~/components/redesign/components/AppearanceBuilder'
4447
import { WIDGET_FONT_SIZES } from '@shared/types'
4548
import type {
@@ -165,6 +168,22 @@ const WidgetPreview: React.FC = () => {
165168
)
166169
}
167170

171+
const options: ContentOptions = {
172+
suggestedTitles: [
173+
'Support this content',
174+
'Make a payment',
175+
'Contribute now',
176+
'Help support',
177+
'One-time donation'
178+
],
179+
titleHelpText: 'Message to encourage one-time payments',
180+
titleMaxLength: 30,
181+
messageLabel: 'Widget message',
182+
messagePlaceholder: 'Enter your widget message...',
183+
messageHelpText: 'Describe how payments support your work',
184+
messageMaxLength: 300
185+
}
186+
168187
export default function Widget() {
169188
const snap = useSnapshot(toolState)
170189
const { actions: uiActions } = useUI()
@@ -177,19 +196,6 @@ export default function Widget() {
177196
usePathTracker()
178197

179198
const config: ToolContent | WidgetToolAppearance = {
180-
suggestedTitles: [
181-
'Support this content',
182-
'Make a payment',
183-
'Contribute now',
184-
'Help support',
185-
'One-time donation'
186-
],
187-
titleHelpText: 'Message to encourage one-time payments',
188-
titleMaxLength: 30,
189-
messageLabel: 'Widget message',
190-
messagePlaceholder: 'Enter your widget message...',
191-
messageHelpText: 'Describe how payments support your work',
192-
messageMaxLength: 300,
193199
currentTitle: snap.currentConfig?.widgetTitleText,
194200
currentMessage: snap.currentConfig?.widgetDescriptionText,
195201
isDescriptionVisible: snap.currentConfig?.widgetDescriptionVisible ?? true,
@@ -372,6 +378,7 @@ export default function Widget() {
372378
<BuilderForm
373379
toolName="widget"
374380
config={config}
381+
options={options}
375382
onBuildStepComplete={(isComplete) =>
376383
toolActions.setBuildCompleteStep(
377384
isComplete ? 'filled' : 'unfilled'

0 commit comments

Comments
 (0)