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

@nestio/cheryl

v3.5.23

Published

Lead Capture & Appointment Scheduling Widget

Downloads

5,014

Readme

Cheryl

Cheryl Tunt

Lead capture and appointment scheduling widget

Setup

Ensure you are using node v10.

Install dependencies

$ npm install

Development

Start development server and watch for changes

$ npm start

For examples to use in development, use http://localhost:8080/examples/. There are three examples:

  • http://localhost:8080/examples/appointment.html - Appointment scheduler widget 1.0 embedded in an iframe.
  • http://localhost:8080/examples/lead-capture.html - Lead Capture widget embedded in an iframe.
  • http://localhost:8080/examples/widget-wrapper.html - Renders both 1.0 widgets directly as part of a React app.
  • http://localhost:8080/examples/new-appointment-scheduler.html - Appointment Scheduler 2.0 (deprecated, we've fully switched to the updated multi-screen version)
  • http://localhost:8080/examples/updated-appointment-scheduler.html - Multi-screen appointment scheduler 2.0

If you want to use a specific API key or group ID, update the config code in each example.

Using Local API

By default the examples assume that you have chuck (our main application) running locally on http://localhost:8000 -- and will attempt to use the API running there.

In order to get the cheryl dev server to talk to the chuck dev server, you must set CORS_ORIGIN_ALLOW_ALL = True in chuck/settings_local.py

Using Production API

If you don't have chuck running locally, you can configure the widgets to use the production API. Run npm start with the NESTIO_API_DOMAIN environment variable set to https://nestiolistings.com:

NESTIO_API_DOMAIN='https://nestiolistings.com' npm start

Builds

We currently bundle Cheryl into 3 seperate builds:

Iframe Widget

This build uses the iframe-widget.js and integration.js entry points and is intended to be deployed to a CDN. End users then load the integration.js script on their own website through a script tag. The integration script tag adds a NestioLeadCapture global javascript object which the end user invokes with configuration parameters. The integration script then creates an iframe with the configuration parameters passed in via a query string.

Babou

This build uses the babou.js entry point and is intended for use with the Babou V2 widget and to be loaded from a CDN. Instead of loading the widget in an iframe, it directly inserts it into the document. Configuration parameters are passed to the widget using data attributes on an element with the id nestio-lead-capture-script (in practice, the actual script tag loading the widget).

React

This build uses index.js entry point and is intended to be distributed through NPM for use within bundled project. It exports the components directly as React components so they can be used within a React application. Configuration parameters are passed directly as props.

Configuration Params

These are the configuration parameters required for the widget to work. Depending on which build you're using, they will be passed in differently.

Required

key : 32 char uuid4 hash [required]

A private Nestio API key

d1642beb0ec944a6a4b001a0f8cf84b5

group : Integer [required]

The user group ID that appointments and/or leads will be assigned to.

1

type : String <lead_capture|lead_capture_appointment> [required]

The type of widget to initialize.

Lead Capture

Enables just Lead Capturing

lead_capture

Appointments

Enables Lead Capture & Appointment Booking

lead_capture_appointment

Optional

color : 6 char hex color String [optional]

A custom color to apply to primary elements (buttons, links, hover states, etc). Custom color used as background will always use white as text color, so keep in mind when working with lighter colors.

5AC7CF

location : String [optional]

A custom location (such as a Building or specific Unit) to apply to either lead capture or appointment booking. Any location passed is saved on the client and/or appointment, and is used on confirmation screens and emails.

60 Water

submitLabel : String [optional]

The text displayed on the submit button on the client information form.

Book a tour

unit : Integer [optional]

The ID of a unit. This unit will added as Client Listing on the Client created by the widget.

buttonTextColor : String [optional]

Used to change the color of the text on the submit button of the widget. This should be 6 digit hex code.

000000

textColor : String [optional]

Used to change the color of the headers for each field on the widget, First Name, Last Name, etc. This should be 6 digit hex code.

00FFFF

disable_pym : Boolean [optional] [dev only]

for use with iframe widget only

A development-only flag to use to disable pym. A forked version of pym.js is being used to resize a parent iframe in production, but creates an error when a parent pym is not listening. Set to true when developing directly in the browser.

disable_pym=true

Using Cheryl on your website

Iframe

<script src="https://integrations.nestio.com/contact-widget/v1/integration.js" id="nestio-lead-capture-frame"></script>
<script type="text/javascript">
    NestioLeadCapture({
        key: 'example-key',
        group: 23,
        type: 'lead_capture_appointment',
        color: '5AC7CF',
        submitLabel: 'Book A Tour',
        location: ''
    });
</script>

React

First install Cheryl

npm install @nestio/cheryl

Then render it within your compoenent

import { WidgetWrapper } from 'cheryl';

class MyComponent extends Component {
    render() {
        return (
            <WidgetWrapper
                apiKey='exampleKey'
                groupId={6}
                widgetType='lead_capture'
                customColor='#5AC7CF'
                initialValues={{
                    people: [
                        {
                          first_name: 'Jeff',
                          email: '[email protected]'
                        }
                    ],
                    price_floor: 900,
                    price_ceiling: 4000,
                    notes: 'example notes'
                }}
                appointmentLocation='60 Water'
            />
         );
     }
}

How to Release a new version

Cheryl is distributed both through a CDN and through NPM. New versions should be released to both.

NPM

  • Update version in package.json, commit, and push

  • Create a new release in github

    • Tag: new version number
    • Name: new version number
    • Description: Reference all PRs that are in the release

    Release form

  • Release a new version to cheryl

    npm publish

  • Bump the version in any corresponding package.json where cheryl is a dependency

CDN

Run

npm run deploy:production

This will update the files available at: https://integrations.nestio.com/contact-widget/v1/ Note that due to caching on the CDN it may take up to 2 minutes to update.

Testing

Run Tests

npm test

Run tests in watch mode:

npm test -- --watch

Run tests with coverage:

npm test -- --coverage

Run tests in watch mode with coverage:

npm test -- --watch --coverage

Run linting

npm run lint

Staging

In order to test v2 widget on staging, you will need to do the following:

  • Increment the Cheryl version, using a format like 1.1.11-beta.0, then commit and push the changes.
  • Create a pre-release on GitHub.
  • Publish a beta version of Cheryl using the command npm publish --tag beta
  • Deploy chuck to a staging link with the updated cheryl version in archer
  • Generate an AppointmentSchedulerLink either through the Chuck staging shell or in Messenger and get appointment link prepending appropriate staging url (e.g chuck-pr<pr#>.nestiostaging.com/appointments/scheduler/).

To test v1 widget on staging, you should perform these steps:

  • Update api.js STAGING_DOMAIN to a chuck staging webhook url you want to use (i.e. https://webhooks-chuck-pr123.nestiostaging.com)
  • Run staging bundle deploy: npm run deploy:staging;
  • Update html file s3://demo.nestiolistings.com/appointment-scheduling-widget/index.html to use staging bundle URL: https://integrations.nestio.com/staging-contact-widget/v1/integration.js
  • The staged widget will be available on S3 Static hosted website. When testing is finished, restore widget URL back to prod value https://integrations.nestio.com/contact-widget/v1/integration.js