8.0.0 • Published 8 months ago

impression-tracker-react-hook v8.0.0

Weekly downloads
72
License
MIT
Repository
github
Last release
8 months ago

impression-tracker-react-hook

This library is used to track impressions using a react useImpressionTracker hook.

See unit tests for a detailed example for both the React Hook and Higher Order Component (HOC).

Hook

import { useImpressionTracker } from 'impression-tracker-react-hook';
import { createEventLogger } from 'promoted-snowplow-logger';

export const handleError = process.env.NODE_ENV !== 'production' ? (err) => { throw err; } : console.error;

export const eventLogger = createEventLogger({
  enabled: true,
  platformName: 'mymarket',
  handleError,
});

const HookedExampleComponent = ({
  // Set insertionId and/or contentId.
  insertionId,
  contentId,
}: Props) => {
  // ref needs to be set on the div to observe.
  // impressionId can be passed directly into a logAction call.
  // logImpressionFunctor can be called to force an impression.
  const [ref, impressionId, logImpressionFunctor] = useImpressionTracker({
    enable: true,
    insertionId,
    contentId,
    handleError,
    logImpression: eventLogger.logImpression,
  });
  return <div ref={ref}>{text}</div>;
};

Higher-Order Components (HOC)

interface Props {
  ...
  // TODO - set this ref on the div.
  impressionRef: (node?: Element | null) => void;
  // Optional props.
  impressionId: string;
  // In case you want to log an impression early.
  logImpressionFunctor: () => void;
}

class ExampleComponent extends React.Component<Props> {
  ...
  render() {
    ...
    return <div ref={this.props.impressionRef}>{text}</div>;
  }
}

const WrappedExampleComponent = withImpressionTracker(ExampleComponent, {
  handleError,
  isEnabled: () => impressionLoggingEnabled,
  getContentId: props => props.contentId,
  getInsertionId: props => props.insertionId,
  // Can be changed to modify the impression.
  logImpression: eventLogger.logImpression,
});

Using Compose

const WrappedExampleComponent = compose(
  ...,
  composableImpressionTracker({
    handleError,
    isEnabled: () => impressionLoggingEnabled,
    getContentId: props => props.contentId,
    getInsertionId: props => props.insertionId,
    // Can be changed to modify the impression.
    logImpression: eventLogger.logImpression,
  })
)(ExampleComponent);

Features

Uses

Scripts

  • Run most commands: npm run finish
  • Build the project: npm run build
    • Validate output bundle size with npm run size
  • Lint the project: npm run lint
  • Run unit tests: npm test or npm test

When developing locally

Broken - We previously had an npm run updateLink command to use npm link for local development. This fails with a Error: Cannot find module 'react'.

For now, just copy/paste the impression tracker code into the client code and test it out.

Deploy

We use a GitHub action that runs semantic-release to determine how to update versions. Just do a normal code review and this should work. Depending on the message prefixes (e.g. feat:, fix:, clean:, docs:), it'll update the version appropriately.

When doing a breaking change, add BREAKING CHANGE: to the PR. The colon is important.

Resources

The base of this repository is a combination of the following repos:

8.0.0

8 months ago

7.8.0

1 year ago

7.7.0

1 year ago

7.4.0

2 years ago

7.3.0

2 years ago

7.2.0

2 years ago

7.1.0

2 years ago

7.6.0

2 years ago

7.5.0

2 years ago

7.0.1

3 years ago

6.1.0

3 years ago

7.0.0

3 years ago

5.1.0

3 years ago

6.0.0

3 years ago

5.0.2

3 years ago

5.0.1

3 years ago

5.0.0

3 years ago

3.0.2

3 years ago

4.0.0

3 years ago

3.0.1

3 years ago

3.0.0

3 years ago

2.0.0

3 years ago

1.1.0

3 years ago

1.0.19

3 years ago

1.0.18

3 years ago

1.0.9

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago