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

tbc-panda-helpers

v0.5.17

Published

Helpers for all Trinidad Benham Panda React apps, including:

Downloads

5

Readme

TBC Common React App Helpers Modules

Helpers for all Trinidad Benham Panda React apps, including:

  • CommonDropDown
  • Icons
  • LabeledInput
  • MultiSelect
  • CheckboxInput
  • DateTimeInput
  • EditSaveButton
  • ConfirmationButton
  • InputWithButton
  • NumericInput

Install

npm install --save tbc-panda-helpers

Styles

As of version 0.4.0, to use any of the components included in this module, the following style file will need to be imported/included into the main App.scss:

@import "tbc-panda-helpers/dist/styles/header.scss";

If the DateTimeInput is to be included in your app, add the following to index.js along with other third party style inclusions:

import "react-datepicker/dist/react-datepicker.css";

Components

CommonDropDown Component:

Common Drop Down takes a dictionary or array of data objects and returns a group of option tags (for use within a select).

import CommonDropDown from "tbc-panda-helpers/dist/CommonDropDown";

Within a select tag or React Component equivalent, place:

<CommonDropDown {...props} />

CommonDropDown props

| Prop | Type | Required | Default | Description | | --- | --- | --- | --- | --- | | options | Array | Required* | null | Array of data objects to be converted to a list. Either this or dictionary must be provided | | dictionary | Object | Required* | null | Object of data objects to be converted to a list. Either this or options must be provided | | sortBy | String | Optional | "nm" | Sets how the return options are sorted; by default this is by the "nm" key | | optionValueCode | String | Optional | "cd" | By default the values of each option will be the data object's "cd"; use this prop if another key should be used instead | | optionDisplayCode | String | Optional | "nm | By default the display name for each option will be the data object's "nm"; use this prop if another key should be used instead | | noBlankFirstLine | Boolean | Optional | false | By default a blank line will be provided at the top of the option list; set this flag if no blank line should be provided | | ignoreActiveFlag | Boolean | Optional | false | By default, only data items with an "act" flag set to true will be displayed in the option list; use this flag to display all items, regardless of "act" flag | | defaultValue | Object | Optional | null | If a defaultValue object is provided, this object will be displayed at the top of the option list, beneath the blank blank line (if applicable). The defaultValue object looks like {optionValueCode: "value", optionalDisplayCode: "Default Value"} | | placeHolderTest | String | Optional | null | Text of a default placeholder value for drop downs; appears at top of list if enabled. Uses class placeHolder-text which can be defined in CSS for optional styling |

Expected data format

options

CommonDropDown expects the options array to look like this:

[
    {
        cd: "CODE",
        nm: "Name",
        act: true,
        ...
    },    
    {
        cd: "INACT",
        nm: "Inactive Value",
        act: false,
        ...
    }
]

Other key/values can be provided, but these will not be used by the CommonDropDown unless set so by the props.

dictionary

CommonDropDown expect the dictionary object to look like this:

{
    CODE: {
        nm: "Name",
        act: true,
        ...
    },
    INACT: {
        nm: "Inactive Value",
        act: false,
        ...
    }
}

By default, the key of each item will be used as the value, although this can be modified via props, as can the display name.

Icons Component:

Icons component contains three pre-build dynamic icons.

import { RequiredIcon, WarningIcon, SavedIcon, YesNoIcon } from "tbc-panda-helpers/dist/Icons";

RequiredIcon:

This is a small icon that can be placed at the end of a field label for a required field; it has a tool tip stating "Required Field"

<RequiredIcon notRequired={!required} />

| Prop | Type | Required | Default | Description | | --- | --- | --- | --- | --- | | notRequired | Boolean | Optional | false | Flag that determines if the required icon is not needed (if set to true, the RequiredIcon does not display). The purpose of this is to add a conditional flag to the icon to simplify conditional required |

WarningIcon:

This is a small icon that can be placed where ever a warning can be placed.

<WarningIcon {...props} />

| Prop | Type | Required | Default | Description | | --- | --- | --- | --- | --- | | show | Boolean | Optional | false | Flag that determines if the warning icon should be displayed | | toolTip | String | Optional | "" | Text of the tooltip (mouse over) of the icon | | cssClasses | String | Optional | "" | Additional css classes that can be applied to the warning icon |

SavedIcon:

This icon shows a red file or green upload icon depending on if the "saved" flag prop is provided.

<SavedIcon saved={saved} />

| Prop | Type | Required | Default | Description | | --- | --- | --- | --- | --- | | saved | Boolean | Optional | false | Flag that determines if the icon is in "unsaved" or "saved" mode |

YesNoIcon:

This icon shows a red x in a circle for prop of false and a green check in a circle for prop of true.

<YesNoIcon boolean={boolean} />

| Prop | Type | Required | Default | Description | | --- | --- | --- | --- | --- | | boolean | Boolean | Optional | false | Flag that determines if the icon is in "yes" or "no" mode |

LabeledInput Component:

This takes the potentially large and oft-repeated Formik field input and simplifies it into a single React component.

import LabeledInput from "tbc-panda-helpers/dist/LabeledInput";

 <LabeledInput
    name="title"
    title="Input Title"
    columnWidths={[6, 6]}
    formProps={formProps}
    {...props}
/>

| Prop | Type | Required | Default | Description | | --- | --- | --- | --- | --- | | name | String | Required | "" | The field name, used by Formik | | title | String | Required* | "" | Text of the input label | | formProps | Object | Required | {} | Formik props passed into its form | | type | String | Optional | "input" | Type of input: "input" for text input field, and "select" for a drop down | | children | React.Component | Optional | null | If "select" type is chosen, this is the list of drop down option tags, typically using the <CommonDropDown /> component | | onChange | Function | Optional | formProps.handleChange() | Optional additional handleChange handler, beyond the one provided by Formik | | columnWidths | Array | Optional | [6 , 6] | The Bootstrap column widths of Label and Input (respectively) | | isDisabled | Boolean | Optional | false | Flag; if true, input is disabled | | disabled | Boolean | Optional | null | DEPRECIATED; alias for isDisabled Flag | | isRequired | Boolean | Optional | false | Flag; if true, the <RequiredIcon /> is displayed within the label, and the field become required | | required | Boolean | Optional | null | DEPRECIATED; alias for isRequird Flag; | | warningMessage | String | Optional | "" | If provided, a <WarningIcon /> will be displayed in the label, with the message as its tooltip | | validate | Function | Optional | null | If required flag is set and the required validation is more than just whether or not a value is returned, this Function determines if requirements are met. Example: validate={() => isNumber(formProps.values.thisField())} If no validate function is provided, validation will be done on whether or not the field is populated. | | hasValidationSchema | Boolean | Optional | false | Flag; if true, assumes parent Formik form is using validationSchema for validation; this validationSchema will take precedence over validate or required parameters; required parameter is still necessary for display of fields that are required (or have other validations) | | fieldClass | String | Optional | "" | Optional class names applied to entire input component | | className | String | Optional | null | DEPRECIATED; alias for fieldClass parameter | | inputFieldClass | String | Optional | "" | Optional class names applied only to input element | | fieldClassName | String | Optional | null | DEPRECIATED; alias for inputFieldClass paramater | | customErrorObject | Object | Optional | {} | Object used to define if tooltip error indicator is used instead of below-field Alert. Parameters are: useTooltip Boolean flag, customErrorClass String used to define which class(es) are applied to errored fields (defaults to internal class "default-error-border") , and placement String for Tooltip position (defaults to "left") |

MultiSelect Component:

MultiSelect is a specialized input select component that allows for multiple items within a drop down to be selected and displayed. It uses react-select as a foundation.

import MultiSelect from "tbc-panda-helpers/dist/MultiSelect";

  <MultiSelect
    formProps={formProps}
    title="MultiSelect Values:"
    name="multiSelectValues"
    columnWidths={[12, 12]}
    optionList={options.map(item => {
      return { value: item.cd, label: item.nm };
    })}
    onChange={sel => {
      console.log("selection:", sel);
      formProps.setFieldValue("multiSelectValues", sel);
    }}
    closeMenuOnSelect
    isRequired
  />

| Prop | Type | Required | Default | Description | | --- | --- | --- | --- | --- | | name | String | Required | "" | The field name, used by Formik | | title | String | Required* | "" | Text of the input label | | formProps | Object | Required | {} | Formik props passed into its form | | optionList | Array | Required** | null | The array of input option objects; option objects should look like { value: item.cd, label: item.nm } | | onChange | Function | Optional | null | onChange event (Formik default onChange event is not passed into MultiSelect) | | closeMenuOnSelect | Boolean | Optional | false | If set to true, this flag causes the selection drop down to close upon a choice being made | | fieldClass | String | Optional | "" | Any custom classes to be used by the MultiSelect component (overall) | | inputFieldClass | String | Optional | "" | Any custom classes to be used in just the input element | | isDisabled | Boolean | Optional | false | Disabled flag | | isRequired | Boolean | Optional | false | Flag; if true, the <RequiredIcon /> is displayed within the label, and the field become required | | customErrorObject | Object | Optional | {} | Object used to define if tooltip error indicator is used instead of below-field Alert. Parameters are: useTooltip Boolean flag, customErrorClass String used to define which class(es) are applied to errored fields (defaults to internal class "default-error-border") , and placement String for Tooltip position (defaults to "left") |

NOTE:

The values returned by MultiSelect is an array of { value: item.cd, label: item.nm } objects (same format as the optionsList input).

CheckboxInput Component:

CheckboxInput

This is similar to LabeledInput except it provides a label and checkbox

import CheckboxInput from "tbc-panda-helpers/dist/CheckboxInput";

 <CheckboxInput
    name="Checkbox"
    title="check"
    formProps={formProps}
    columnWidths={[6, 6]}
    isDisabled={isDisabled}
    isRequired={isRequired}
/>

| Prop | Type | Required | Default | Description | | --- | --- | --- | --- | --- | | name | String | Required | "" | The field name, used by Formik | | title | String | Required | "" | Text of the input label | | formProps | Object | Required | {} | Formik props passed into its form | | columnWidths | Array | Optional | [6 , 6] | The Bootstrap column widths of Label and Input (respectively) | | isDisabled | Boolean | Optional | false | Flag; if true, input is disabled | | isRequired | Boolean | Optional | false | Flag; if true, the <RequiredIcon /> is displayed within the label, and the field become required| | fieldClass | String | Optional | "" | Optional class names applied to input field | | onChange | Function | Optional | formProps.handleChange() | Optional additional handleChange handler, beyond the one provided by Formik | | value | Boolean | Optional | undefined | Value of checkbox; if none provided, will use formProps.values instead |

Checkbox

This component also contains the stand-alone checkbox, which can be used separately from the label.

import { Checkbox } from "tbc-panda-helpers/dist/CheckboxInput";

 <Checkbox
    title="check"
    formProps={formProps}
    isDisabled={isDisabled}
/>

| Prop | Type | Required | Default | Description | | --- | --- | --- | --- | --- | | title | String | Required | "" | Text of the input label | | formProps | Object | Required | {} | Formik props passed into its form | | isDisabled | Boolean | Optional | false | Flag; if true, input is disabled | | onChange | Function | Optional | null | onChange event (Formik default onChange event is not passed into MultiSelect) |

DateTimeInput Component:

Date/Time input and label, using react-datepicker within Formik Field.

import DateTimeInput from "tbc-panda-helpers/dist/DateTimeInput";

 <DateTimeInput
    name="datetime"
    title="Date/Time"
    formProps={formProps}
    columnWidths={[6, 6]}
    placeHolderText="Select Date and Time"
    isDisabled={isDisabled}
    isRequired={isRequired}
    fieldClass=""
    calendarClass=""
    visualDateFormat="MMMM d, yyyy h:mm aa"
    dataDateFormat="MM/DD/YYYY hh:mm A"
    showTimeSelect={showTimeSelect}
    timeIntervals={15}
    timeFormat="HH:mm"
    timeCaption="Time"
  />

| Prop | Type | Required | Default | Description | | --- | --- | --- | --- | --- | | name | String | Required | "" | The field name, used by Formik | | title | String | Required | "" | Text of the input label | | formProps | Object | Required | {} | Formik props passed into its form | | columnWidths | Array | Optional | [6 , 6] | The Bootstrap column widths of Label and Input (respectively) | | placeHolderText | String | Optional | "" | Text that will appear in field until values are entered | | isDisabled | Boolean | Optional | false | Flag; if true, input is disabled | | isRequired | Boolean | Optional | false | Flag; if true, the <RequiredIcon /> is displayed within the label, and the field become required | | fieldClass | String | Optional | "" | Optional class names applied to input field | | calendarClass | String | Optional | "" | Optional class names applied to calendar popper | | visualDateFormat | String | Optional | "MMMM d, yyyy h:mm aa" | Optional format for date as displayed | | dataDateFormat | String | Optional | "MM/DD/YYYY hh:mm A" | Optional format for date used by data/form | | showTimeSelect | Boolean | Optional | true | Flag; if true, time selection is available | | timeIntervals | Number | Optional | 15 | Optional increments used by time selection | | timeFormat | String | Optional | "HH:mm" | Optional format for time in selection | | timeCaption | String | Optional | "Time" | Optional caption for time selection | | customErrorObject | Object | Optional | {} | Object used to define if tooltip error indicator is used instead of below-field Alert. Parameters are: useTooltip Boolean flag, customErrorClass String used to define which class(es) are applied to errored fields (defaults to internal class "default-error-border") , and placement String for Tooltip position (defaults to "left") |

NOTE: Additional props can be passed into DateTimeInput, and they will pass as is into DatePicker within.

Edit/Save Component:

A single component that replaces need for separate "Edit" and "Save" buttons (displayed based on state). Button component with two states: a single button with text "Edit" and a pair of buttons for "Save" and "Cancel".

import EditSaveButton from "tbc-panda-helpers/dist/EditSaveButton";

<EditSaveButton
  isDisabled={isDisabled}
  isSaveMode={toggleValue}
  toggleFunc={() => {
    toggleEditSave();
  }}
  saveFunc={() => {
    formProps.handleSubmit();
    toggleEditSave();
  }}
  cancelFunc={() => {
    formProps.handleReset();
    toggleEditSave();
  }}
  isSaveDisabled={isSaveDisabled}
  align={align}
/>

| Prop | Type | Required | Default | Description | | --- | --- | --- | --- | --- | | isDisabled | Boolean | Optional | false | flag; if "true" then "Edit" mode is disabled | | isSaveMode | Boolean | Required | false | flag; if "true" then mode switches to "Save|Cancel" | | toggleFunc | Function | Required | () => {} | Function fired when "Edit" is pressed, typically switching the value provided to the "isSaveMode" prop | | saveFunc | Function | Required | () => {} | Function fired when "Save" is pressed; NOTE: this does not automatically fire toggleFunc, so that should be provided separately if desired | | cancelFunc | Function | Optional | same as toggleFunc | Function fired when "Save" is pressed; NOTE: if nothing is provided, then toggleFunc will be fired, but toggleFunc isn't fired automatically if a function is provided to the cancelFunc prop | | isSaveDisabled | Boolean | Optional | false | flag; if "true" then "Save" button is disabled | | align | String | Optional | "right" | "right" or "left"; the alignment of the buttons | | isIconOnly | Boolean | Optional | false | flag; if "true" then text is removed and only icons display; changes width from 160px to 70px | | iconSize | String | Optional | "lg" | Used only if isIconOnly flag is true; sets icon size based on FontAwesome icon sizing convention ("lg", "2x", etc) | | primaryButton | Object | Optional | {class: "info", text: "Edit", icon: "far fa-edit"} | Optional object containing "edit" button's class, text, and iconvalues |

ConfirmationButton Component:

Button component with two states: a single button with customizable text and a pair of buttons for "Save" and "Cancel". Replaces the need for some confirmation modals.

import ConfirmationButton from "tbc-panda-helpers/dist/ConfirmationButton";

<ConfirmationButton
  primaryButton={{      
    class: "btn-main",
    text: "Edit",
    icon: "far fa-edit",
    isDisabled: false
  }}
  confirmedFunc={confirmedFunc}
  message="Are you sure?"
  align="right"
/>

| Prop | Type | Required | Default | Description | | --- | --- | --- | --- | --- | | primaryButton | Object | Required | {} | Object containing button class, text, icon, and isDisabled flag | | confirmedFunc | Function | Required | () => {} | Function fired upon confirmation | | message | String | Optional | "Confirm?" | Tooltip message explaining why there is a confirmation | | align | String | Optional | "right" | "right" or "left"; the alignment of the buttons |

InputWithButton Component:

Text input component with integration button.

import InputWithButton from "tbc-panda-helpers/dist/InputWithButton";

<InputWithButton
  title="Input:"
  name="input"
  formProps={formProps}
  columnWidths={[6, 6]}
  isRequired={isRequired}
  buttonIcon={"fas fa-search"}
  buttonClass={"btn-prime"}
  buttonPosition={"end"}
  isButtonDisabled={!formProps.values.input}
  buttonFunction={() => {
    setModalOpen(true);
  }}
/>

| Prop | Type | Required | Default | Description | | --- | --- | --- | --- | --- | | name | String | Required | "" | The field name, used by Formik | | title | String | Required | "" | Text of the input label | | formProps | Object | Required | {} | Formik props passed into its form | | columnWidths | Array | Optional | [6 , 6] | The Bootstrap column widths of Label and Input (respectively) | | fieldClass | String | Optional | "" | Optional class names applied to input field | | isDisabled | Boolean | Optional | false | Flag; if true, input is disabled | | isRequired | Boolean | Optional | false | Flag; if true, the <RequiredIcon /> is displayed within the label, and the field become required | | buttonIcon | String | Optional | "fas fa-search" | Icon used by Button | | buttonClass | String | Optional | "btn-prime" | Class used by Button (beyond "btn") | | buttonPosition | String | Optional | "end" | Is button before ("start") or after ("end") text input field | | isButtonDisabled | Boolean | Optional | false | flag; If true button is disabled | | buttonFunction | Function | Required | () => {} | Function fired when button is pressed |

NumericInput Component:

Input component for numeric input only.

NOTE: This is more robust than using type="number" within LabeledInput.

import NumericInput from "tbc-panda-helpers/dist/NumericInput";

<NumericInput
  name="number"
  title="Number:"
  formProps={formProps}
  columnWidths={[6, 6]}
  isDisabled={demoFlag}
/>

| Prop | Type | Required | Default | Description | | --- | --- | --- | --- | --- | | name | String | Required | "" | The field name, used by Formik | | title | String | Required | "" | Text of the input label | | formProps | Object | Required | {} | Formik props passed into its form | | columnWidths | Array | Optional | [6 , 6] | The Bootstrap column widths of Label and Input (respectively) | | fieldClass | String | Optional | "" | Optional class names applied to input field | | isDisabled | Boolean | Optional | false | Flag; if true, input is disabled | | isRequired | Boolean | Optional | false | Flag; if true, the <RequiredIcon /> is displayed within the label, and the field become required | | validationMessage | String | Optional | "" | If prop contains a value, message will be displayed beneath field (same styles as Required alert) | | allowNegative | Boolean | Optional | true | Flag; if false, negative values are disallowed | | showThousandSeparator | Boolean | Optional | true | Flag; if false then comma thousand separator is not displayed | | isFixedDecimalScale | Boolean | Optional | false | Flag; if true then all values will contain number of significant digits as defined in decimalScale prop | | decimalScale | Number | Optional | 0 | Number of significant digits any value in field will be rounded to | | onChange | Function | Optional | null | Function called onChange; if nothing provided, then default formProps onChange will be called | | units | String | Optional | null | If provided, then will be displayed as an addendum or prepended to input field | | isPrependedUnits | Boolean | Optional | false | Flag; if true then units will be displayed before input field; otherwise, will be displayed after | | customErrorObject | Object | Optional | {} | Object used to define if tooltip error indicator is used instead of below-field Alert. Parameters are: useTooltip Boolean flag, customErrorClass String used to define which class(es) are applied to errored fields (defaults to internal class "default-error-border") , and placement String for Tooltip position (defaults to "left") | | value | Boolean | Number | undefined | Value of field; if none provided, will use formProps.values instead |

Required NPM Packages

npm install --save formik react-select react-datepicker lodash moment framer-motion react-number-format

Testing

For any unit test file that deep renders ("mounts") this imported component, add the following:

jest.mock("tbc-panda-helpers/dist/CommonDropDown", () => "div"); jest.mock("tbc-panda-helpers/dist/Icons", () => "div"); jest.mock("tbc-panda-helpers/dist/LabeledInput", () => "div"); jest.mock("tbc-panda-helpers/dist/MultiSelect", () => "div"); jest.mock("tbc-panda-helpers/dist/CheckboxInput", () => "div"); jest.mock("tbc-panda-helpers/dist/DateTimeInput", () => "div"); jest.mock("tbc-panda-helpers/dist/EditSaveButton", () => "div"); jest.mock("tbc-panda-helpers/dist/ConfirmationButton", () => "div"); jest.mock("tbc-panda-helpers/dist/InputWithButton", () => "div"); jest.mock("tbc-panda-helpers/dist/NumericInput", () => "div");

Changelog

  • 0.3.0: Addition of CheckboxInput, DateTimeInput, EditSaveButton, ConfirmationButton, InputWithButton components
  • 0.3.7: Updated Boolean naming convention in new components (to "isSomething" or "showSomething" instead of just "something")
  • 0.4.2: Added NumericInput
  • 0.5.0: Updated MultiSelect to match other inputs; improvements to NumericInput
  • 0.5.1: Added onChange prop option to CheckboxInput
  • 0.5.3: LabeledInput now functions with Formik/Yup validationSchema; uses both isRequired/isDisabled and required/disabled (depreciated) params
  • 0.5.6: Alternate error display option added (customErrorObject; generates Tooltip instead of Alert)
  • 0.5.9: Added isIconOnly flag to Save/Edit Button
  • 0.5.12: Added iconSize field to icon only Save/Edit button
  • 0.5.15: Added optional primaryButton param to Save/Edit button
  • 0.5.16: Allow 0 in NumericInput required fields; also disabled autocomplete in DateTimeInput
  • 0.5.17: Added placeHolderText to CommonDropDown