Skip to content

Commit 51e96f7

Browse files
committed
add stream identifier to event
1 parent 0b7969e commit 51e96f7

3 files changed

Lines changed: 47 additions & 13 deletions

File tree

src/components/ga4/EventBuilder/event.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,12 +40,14 @@ const eventFor = (
4040
type: EventType,
4141
categories: Category[],
4242
parameters: Parameter[],
43-
firstItem?: Parameter[]
43+
firstItem?: Parameter[],
44+
clients: ("web" | "app")[] = ["web", "app"]
4445
) => ({
4546
type,
4647
categories,
4748
parameters,
4849
items: firstItem === undefined ? undefined : [firstItem],
50+
clients,
4951
})
5052

5153
const custom_event = eventFor(EventType.CustomEvent, [Category.Custom], [], [])
@@ -60,7 +62,9 @@ const ad_impression = eventFor(
6062
stringParam("ad_unit_name", "Banner_03"),
6163
stringParam("currency", "USD"),
6264
numberParam("value", 3.99),
63-
]
65+
],
66+
undefined,
67+
["app"]
6468
)
6569

6670
const add_payment_info = eventFor(
@@ -306,7 +310,9 @@ const screen_view = eventFor(
306310
[
307311
stringParam("screen_class", "MainActivity"),
308312
stringParam("screen_name", "About"),
309-
]
313+
],
314+
undefined,
315+
["app"]
310316
)
311317

312318
const search = eventFor(
@@ -598,5 +604,11 @@ const events = Object.values(EventType).map(eventType =>
598604
suggestedEventFor(eventType)
599605
)
600606

601-
export const eventsForCategory = (category: Category) =>
602-
events.filter(event => event.categories.find(c => c === category))
607+
export const eventsForCategory = (category: Category, useFirebase?: boolean) => {
608+
const client = useFirebase ? "app" : "web"
609+
return events.filter(
610+
(event: any) =>
611+
event.categories.find((c: any) => c === category) &&
612+
event.clients.includes(client)
613+
)
614+
}

src/components/ga4/EventBuilder/index.spec.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ describe("Event Builder", () => {
187187

188188
const enInput = within(eventName).getByRole("combobox")
189189
//eventCategory.focus()
190-
renderer.fireEvent.change(enInput, { target: { value: "select_content" } })
190+
renderer.fireEvent.change(enInput, { target: { value: "campaign_details" } })
191191

192192
await userEvent.type(
193193
timestampMicros,
@@ -208,7 +208,7 @@ describe("Event Builder", () => {
208208
expect(payload).toHaveTextContent(/"user_id":"my_user_id"/)
209209
expect(payload).toHaveTextContent(/"timestamp_micros":"1234"/)
210210
expect(payload).toHaveTextContent(/"non_personalized_ads":true/)
211-
expect(payload).toHaveTextContent(/"name":"select_content"/)
211+
expect(payload).toHaveTextContent(/"name":"campaign_details"/)
212212
})
213213
})
214214
})

src/components/ga4/EventBuilder/index.tsx

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,11 @@ const EventBuilder: React.FC = () => {
226226
setNonPersonalizedAds,
227227
} = useInputs(categories)
228228

229+
const eventOptions = React.useMemo(
230+
() => eventsForCategory(category, useFirebase),
231+
[category, useFirebase]
232+
)
233+
229234
const formatPayload = React.useCallback( () => {
230235
try {
231236
if (inputPayload) {
@@ -273,12 +278,23 @@ const EventBuilder: React.FC = () => {
273278
<Switch
274279
data-testid="use firebase"
275280
checked={useFirebase}
276-
onChange={e => {
277-
setUseFirebase(e.target.checked)
281+
onChange={e => {
282+
const newUseFirebase = e.target.checked
283+
setUseFirebase(newUseFirebase)
278284

279285
if (!e.target.checked) {
280286
setUseTextBox(false)
281287
}
288+
289+
// Always reset the event type when the client changes.
290+
const newOptions = eventsForCategory(category, newUseFirebase)
291+
if (newOptions.length > 0) {
292+
setType(newOptions[0].type)
293+
} else {
294+
// If the new client has no events for this category, switch to Custom.
295+
setCategory(Category.Custom)
296+
setType(EventType.CustomEvent)
297+
}
282298
}}
283299
name="use firebase"
284300
color="primary"
@@ -446,9 +462,15 @@ const EventBuilder: React.FC = () => {
446462
value={category}
447463
onChange={(_event, value) => {
448464
setCategory(value as Category)
449-
const events = eventsForCategory(value as Category)
450-
if (events.length > 0) {
451-
setType(events[0].type)
465+
const newOptions = eventsForCategory(
466+
value as Category,
467+
useFirebase
468+
)
469+
if (newOptions.length > 0) {
470+
setType(newOptions[0].type)
471+
} else {
472+
setCategory(Category.Custom)
473+
setType(EventType.CustomEvent)
452474
}
453475
}}
454476
renderInput={params => (
@@ -483,7 +505,7 @@ const EventBuilder: React.FC = () => {
483505
autoComplete
484506
autoHighlight
485507
autoSelect
486-
options={eventsForCategory(category).map(e => e.type)}
508+
options={eventOptions.map(e => e.type)}
487509
getOptionLabel={eventType => eventType}
488510
value={type}
489511
onChange={(_event, value) => {

0 commit comments

Comments
 (0)