Skip to content

Commit 4c18389

Browse files
committedApr 22, 2025·
filter on true
1 parent 8a73a19 commit 4c18389

File tree

3 files changed

+32
-29
lines changed

3 files changed

+32
-29
lines changed
 

‎packages/sources/datalayer/src/__tests__/index.test.ts

Lines changed: 23 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -54,33 +54,13 @@ describe('source dataLayer', () => {
5454
expect(dataLayer).toEqual(['foo']);
5555
});
5656

57-
test('failing filter', async () => {
58-
const filterFn = jest
59-
.fn()
60-
.mockImplementationOnce(() => {
61-
throw new Error();
62-
})
63-
.mockImplementation(() => true);
64-
65-
sourceDataLayer({ elb, filter: filterFn });
66-
dataLayer.push({ event: 'foo' });
67-
68-
await jest.runAllTimersAsync();
69-
expect(filterFn).toHaveBeenCalledTimes(1);
70-
expect(elb).toHaveBeenCalledTimes(0);
71-
72-
dataLayer.push({ event: 'bar' });
73-
await jest.runAllTimersAsync();
74-
expect(elb).toHaveBeenCalledTimes(1);
75-
});
76-
7757
test('filter', async () => {
7858
const mockFn = jest.fn();
7959
sourceDataLayer({
8060
elb,
8161
filter: (event) => {
8262
mockFn(event);
83-
return isObject(event) && event.event !== 'foo';
63+
return isObject(event) && event.event === 'foo';
8464
},
8565
});
8666

@@ -242,12 +222,31 @@ describe('source dataLayer', () => {
242222
throw new Error();
243223
});
244224

245-
const instance = sourceDataLayer({ elb });
246-
await jest.runAllTimersAsync();
225+
const source = sourceDataLayer({ elb });
247226
dataLayer.push('foo');
248227
await jest.runAllTimersAsync();
249228
expect(elb).toThrow();
250229
expect(mockOrg).toHaveBeenCalledTimes(1);
251-
expect(instance?.processing).toBe(false);
230+
expect(source?.processing).toBe(false);
231+
});
232+
233+
test('failing filter', async () => {
234+
const filterFn = jest
235+
.fn()
236+
.mockImplementationOnce(() => {
237+
throw new Error();
238+
})
239+
.mockImplementation(() => false);
240+
241+
sourceDataLayer({ elb, filter: filterFn });
242+
dataLayer.push({ event: 'foo' });
243+
244+
await jest.runAllTimersAsync();
245+
expect(filterFn).toHaveBeenCalledTimes(1);
246+
expect(elb).toHaveBeenCalledTimes(0);
247+
248+
dataLayer.push({ event: 'bar' });
249+
await jest.runAllTimersAsync();
250+
expect(elb).toHaveBeenCalledTimes(1);
252251
});
253252
});

‎packages/sources/datalayer/src/push.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export async function push(config: Config, live: boolean, ...args: unknown[]) {
4343
entries.map(
4444
tryCatchAsync(async (obj) => {
4545
// Filter out unwanted events
46-
if (config.filter && !(await config.filter(obj))) return;
46+
if (config.filter && (await config.filter(obj))) return;
4747

4848
// Map the incoming event to a WalkerOS event
4949
const mappedObj = await objToEvent(filterValues(obj), config);

‎website/docs/sources/dataLayer/configuration.mdx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ sourceDataLayer({
3939
| Option | Type | Description |
4040
| ------- | -------- | ----------------------------------------------------------------------------------------------------------- |
4141
| elb\* | function | The function to push the events to |
42-
| filter | function | A check to filter specific events |
42+
| filter | function | A check to filter specific events (return `true` to abort processing) |
4343
| mapping | object | The&nbsp;<Link to="/docs/destinations/event_mapping#eventconfig">mapping configuration</Link> of the events |
4444
| name | string | Name of the dataLayer array (default: `dataLayer`) |
4545
| prefix | string | Prefix for the event name to match entity action format (default: `dataLayer`) |
@@ -56,7 +56,7 @@ gtag('set', 'campaign', { term: 'running+shoes' });
5656
// Will become "set campaign" as event name
5757
```
5858

59-
:::tip
59+
:::note
6060

6161
Use `console.log` for the `elb` function to inspect events.
6262

@@ -110,8 +110,12 @@ walker.js instance, another dataLayer related destination might push that event
110110
to the dataLayer again (like GA4). Therefore, while processing an event, newly
111111
pushed events are ignored and stored in the `skipped` array.
112112

113-
As a additional rule the `filter` function can be used to ignore events that
114-
might have been pushed by a walker.js destination.
113+
:::note
114+
115+
The `filter` function can also be used to ignore events that might have been
116+
pushed by a walker.js destination.
117+
118+
:::
115119

116120
## Examples
117121

0 commit comments

Comments
 (0)
Please sign in to comment.