npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

sf-retail-media-library

v1.4.1

Published

This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.

Downloads

445

Readme


\

SF Retail Media Library




\

User Guide






\

Last Updated: 23/10/2024

Version : 1

Owner: Belfiore Giovanni


\

1. What is the purpose 2

2. Example of adv 2

3. Considerations on technologies 2

5. thoughtful technologies 3

6. Implementation scheme 4

7. Installation 5

8. AdvManager 5

8.1 AdvManagerProps 6

8.2 Params defineSlot 7

9. Component Adv (React) 8

10. Example of use 9

















\

1. What is the purpose

We want to create a library to be distributed via the NPM registry that manages the rendering of ADV retailers on the various shopfully applications. This library will take care of logic like:

  • check user privacy consent

  • render of adv in various sizes

  • any ad refresh logics

2. Example of adv

3. Considerations on technologies

  • Considering the widespread use of React.js among the marketplaces, the predominant technology for the development of this library will be React.

  • Considering that this library will have to be inserted in other contexts that work with style sheets, it will be very important to consider the modules for the style sheets so that there is no overwriting of the classes present in the application project.

  • Since the rendering of the ads is subject to the user's consent given and since this could come from various sources (oneTrust, Iubenda,...) the library will not take care of reading the cookies set by the consent managers but only of reading a state ( ACCEPTED / NOT ACCEPTED) provided by the marketplace of use

5. thoughtful technologies

  • Vitejs: is a frontend build tool that helps you build web applications faster and more efficiently than traditional build tools like Webpack.

Vitejs' strengths are:

  • Speed ​​of development

  • Optimized builds

  • Native support for ES Modules

  • Simple setup

  • Compatibility with modern frameworks

  • TypeScript and JSX support

  • React: we will take care of rendering the components and their state manager using React.js. At the moment it seems the most sensible choice given its widespread use in the company

  • TypeScript: introduces static typing, which means you can declare the type of variables, functions, and objects. This helps prevent type-related runtime errors, such as when trying to access a property of an object that doesn't exist.

6. Implementation scheme

the library will essentially be composed of 2 components (without considering type or style files):

  1. AdvManager: will take care of inserting the necessary script into the head of the application for adv requests to Google Tag Manager. furthermore, this component will contain the logic regarding the given consent released by the user

  2. Adv: it will be the component that takes care of the actual rendering of the container component in google tag manager and will ignite the frame with the adv. this component will also take care of the dimensions to be given to the slot and any styles passed from the outside




\

7. Installation 

npm i sf-retail-media-library

8. AdvManager

AdvManager takes care of inserting the gpt.js script into the head and defining the slot rendering rules

\

| | | | | ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------- | | Method | Params | Note | | init | props?: AdvManagerProps*(paragraph 8.1)* | initialize the gpt.js script and set params for slot | | update | props: AdvManagerProps*(paragraph 8.1)* | update params for slot. if the script has not been committed, call init | | getSlot | advUnitPath: string | returns the slot object identified by the path passed as a parameter | | destroySlot | advUnitPath: string | destroys the slot object identified by the path passed as a parameter | | refreshSlot | advUnitPath: string | refresh the slot object identified by the path passed as a parameter | | defineSlot | advUnitPath: string,    advId: string,    sizeMap: [number, number],    {      defaultTargetingParams,      additionalTargetingParams,    }: { defaultTargetingParams?: IDefaultTargetingParams; additionalTargetingParams?: Record<string, string> }(paragraph 8.2) | defines the slot object identified by the parameters |

8.1 AdvManagerProps

\

{
advConf:{
sizeMap: [728,90],
divId: ‘’div-gpt-ad-1713536623572,
path: ‘/234290497/next-retail-media-multisize’,
refreshTime: 100,
},
privacySettings: {...},
enableLazyLoadConfig:{
fetchMarginPercent: 123,
mobileScaling: 456, 
renderMarginPercent: 789
},
enableSingleRequest: true
}

| | | | | -------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------: | | advConf | configuration for the slots | optional | | —- sizeMap | array of 2 numbers identifying the width and height of the slots | optional | | —- divId | slot divId base. A specialization can be added to this base as an Adv component | required | | —- path | slot path base. A specialization can be added to this base as an Adv component | required | | —- refreshTime | number of seconds for the periodic refresh interval | optional | | privacySettings | Allows you to configure all privacy settings from a single API using a configuration object.See the documentation at the following link for optionshttps://developers.google.com/publisher-tag/reference?hl=it#googletag.PubAdsService_setPrivacySettings | optional | | enableLazyLoadConfig | Enable lazy loading in GPT as defined by the config object. For more detailed examples, see the lazy loading example.https://developers.google.com/publisher-tag/samples/lazy-loading?hl=itfor parameter see this:// Fetch slots within 5 viewports.etchMarginPercent: 500,  // Render slots within 2 viewports.  renderMarginPercent: 200,  // Double the above values on mobile.  mobileScaling: 2.0, | optional | | enableSingleRequest | Allows you to activate single request mode to retrieve multiple ads at once. This requires all publisher ad slots to be defined and added to PubAdsService before enabling the service. You must set the single request mode before activating the service. | optional |

\

8.2 Params defineSlot

| | | | | ------------------------- | -------------------------------------------------------------------- | :------: | | advUnitPath | path of slot | required | | advId | divId of slot | required | | sizeMap | array of 2 numbers identifying the width and height of the slots | required | | targeting | | | | —- defaultTargetingParams |   default targeting list. Each value is optional* flyerId?: string; |

  • retailerId?: string;

  • storeId?: string;

  • platform?: string;

  • placement?: string;

  • trafficSourceType?: string;

  • environment?: string;

  • host?: string; | | | —- additionalTargetingParams | additional targeting in the format Record<string,string> | |

9. Component Adv (React)

the Adv component takes care of rendering and defining the slot for the adv

          <Adv
               advConf={{
                 //divId: `div-gpt-ad-1713536623572`,
                 //path: `/234290497/next-retail-media-multisize`,
    		    specializationDivId: `section-1`,
                 specializationPath: `section/1`,
                 sizeMap: [728, 90],
                 refreshTime: 20,
               }}
               defaultTargetingParams={{
                 flyerId: '1174245',
                 retailerId: '656',
               }}
             />

Below is information on the component props:

  • advConf: slot information

    • divId: overrides the value set in AdvManager.

    • path: overrides the value set in AdvManager.

    • specializationDivId: specializes the value set in AdvManager/Adv. the format for any specializations must be

<param1>-<param2>-....-<paramN>.

For example

section-1

  • specializationPath: specializes the value set in AdvManager. the format for any specializations must be

<param1>/<param2>/..../<paramN>

For example

section/1

  • sizeMap: overrides the value set in AdvManager.

  • refreshTime: overrides the value set in AdvManager.

  • defaultTargetingParams: default targeting list. Each value is optional

    • flyerId?: string;

    • retailerId?: string;

    • storeId?: string;

    • platform?: string;

    • placement?: string;

    • trafficSourceType?: string;

    • environment?: string;

    • host?: string;

  • additionalTargetingParams: additional targeting in the format Record<string,string>

10. Example of use 

import { Adv, AdvManager, IDefaultTargetingParams } from 'sf-retail-media-library'
function App() {
 AdvManager.init({
   advConf: { 
divId: 'div-gpt-ad-1713536623572', 
path: '/234290497/next-retail-media-multisize', 
sizeMap: [728, 90], 
refreshTime: 20
},
 });
 
return (
   <div>
     {Array.from({ length: 100 }, (_, i) => i).map((iii, i) => {
       return (
         <>
           <p>Lorem ipsum dolor sit amet.</p>
          
           <div style={{ display: 'flex', width: '100%', justifyContent: 'center' }}>
             <Adv
               key={i}
               advConf={{
                 //divId: `div-gpt-ad-1713536623572`,
                 //path: `/234290497/next-retail-media-multisize`,
         	   specializationDivId: `section-${i + 1}`,
                 specializationPath: `section-${i + 1}`,
                 sizeMap: i % 2 == 0 ? [300, 250] : [728, 90],
                 refreshTime: 20,
               }}
               defaultTargetingParams={{
                 flyerId: '1174245',
                 retailerId: '656',
               }}
             />
           </div>
         </>
       );
     })}
   </div>
 );
}