1.0.47 • Published 5 years ago

influtech-filters v1.0.47

Weekly downloads
1
License
MIT
Repository
-
Last release
5 years ago

Dynamic Filters Form

Dynamic form of filters to several Fluvip projects.

Development

To run with ssr:

  • with npm
npm start
  • with yarn
yarn start

To run with no ssr

  • with npm
npm run nossr
  • with yarn
yarn run nossr

Componentes

Jerarquia de los componentes

npm.io

FormBuilder Component

src/components/FormBuilder/FormBuilder.jsx

Este componente recibe la estructura del formulario (formStructure prop), ver ejemplo en sample/initialData.js

La estruturura principal es un Array, que contendra diferentes wrappers (Arreglos)

FormBuilder:

[]

npm.io

Wrapper Component

src/components/FormBuilder/Wrapper.jsx

La estrutura de este componente es un Array cada arreglo puede contener inputs o grupos de inputs (Objetos {})

[[],[]]

npm.io

Un wrapper puede ser:

  • un Array de inputs (SingleInputWrapper)
    {}
  • un Array de grupos de inputs (GroupInputWrapper)
    {type: "group" ...}
    La estructura visual de los elementos contenidos en un Wrapper estara determinada por los componentes incluidos dentro de este; De acuerdo a la cantidad y tipo de elementos se determina el Grid haciendo uso del 'CSS Grid Layout Module'

Ejemplos:

SingleInputWrapper Component

  • [
      [
        { 
          //props for input 
        },
        { 
          //props for input 
        }
      ]
    ]

    Genera un SingleInputWrapper con grid: grid-template-columns: 1fr 1fr;

    npm.io

  • [
      [
        { 
          //props for input 
        },
        { 
          //props for input 
        },
        { 
          //props for input 
        }
      ]
    ]

    Genera un SingleInputWrapper con grid: grid-template-columns: 1fr 1fr 1fr;

    npm.io

  • Los input de tipo submit dentro de un SingleInputWrapper tiene un espacio 'auto', de forma que el grid-item tomara el ancho del elemento de typo submit

    [
      [
        { 
          //props for input 
        },
        { 
          //props for input 
        },
        { 
          //props for input
          type: 'submit',
          ... 
        }
      ]
    ]

    Genera un SingleInputWrapper con grid: grid-template-columns: 1fr 1fr auto;

    npm.io

GroupInputWrapper Component

  • [
      [
        { 
          //props for group of inputs
          type: "group", title: "Group title",
          inputs [
            {
              //props for input 
            },
            {
              //props for input 
            },
            {
              //props for input 
            }
          ]
          ... 
        }
      ]
    ]

    Genera un GroupInputWrapper con grid: grid-template-columns: 1fr;

    npm.io

  • [
      [
        { 
          //props for group of inputs
          type: "group", title: "Group title",
          inputs [{},{},{}]
          ... 
        },
        { 
          //props for group of inputs
          type: "group", title: "Group title",
          inputs [{},{}]
          ... 
        }
      ]
    ]

    Genera un GroupInputWrapper con grid: grid-template-columns: 1fr 1fr;

    npm.io

Collapsible Wrapper

Para hacer que un Wrapper sea colapsable, alguno de los inputs hijo debe tener la propiedad collapsible, a su vez recibe la propiedad title que funciona como el header del Wrapper. *

[
  [
    {
      //props for group of inputs, also the general wrapper is collapsible
      type: "group", title: "Group title", collapsible: { title: "Collapsible Wrapper"}
      inputs [{},{},{}]
      ...
    },
    {
      //props for group of inputs
      type: "group", title: "Group title",
      inputs [{},{}]
      ...
    },
    ...
  ]
]

Genera un GroupInputWrapper con grid: grid-template-columns: 1fr 1fr;, a su vez también genera la acción de colapso del Wrapper

npm.io

Inputs

un wrapper puede contener los siguientes tipos de input

Text Component

{ type: "text", name: "screen_name", placeholder: "Nombre o username", emptyValue: "" }

npm.io

Submit Component

{ type: "submit", name: "submit", value: "Buscar" }

npm.io

SelectAutocompleter Component

SelectAutocompleter en SingleInputWrapper:

    {
      type: "select_autocompleter", name: "content_term", placeholder: "input", emptyValue: "", onSingleWrapper: true, withSubOptions: true, searchOnChange: true,
      options: [
        { value: "Musica", valueToSend: "musica", subOptions: [{ value: "Rock", valueToSend: "rock" }, { value: "Reggae", valueToSend: "reggae" }] },
        { value: "Motos", valueToSend: "motorcycles", subOptions: [{ value: "Apache", valueToSend: "apache" }, { value: "Himalayan", valueToSend: "himalayan" }] },
        { value: "sobresdrújulas", valueToSend: "sobre", subOptions: [{ value: "ágilmente", valueToSend: "agil" }, { value: "instantáneamente", valueToSend: "insta" }] }
      ]
    }

npm.io

SelectAutocompleter en GroupInputWrapper:

  {
    type: "select_autocompleter", name: "influencer_country", label: "País", placeholder: "País del influenciador", emptyValue: "",
    options: [
      { value: "Colombia", valueToSend: "1" },
      { value: "Narnia", valueToSend: "2" },
      { value: "México", valueToSend: "3" }
    ]
  }

npm.io

Opciones especiales

  • onSingleWrapper: true, determina el estilo visual dependiendo del tipo de wrapper en el que es incluido
  • withSubOptions: true, determina la posibilidad de relizar busqueda en sub opciones
  • searchOnChange: true, determina la opción de buscar o no, cuando el evento OnChange es detectado en el input

Checkbox Component

{
  type: "checkbox", name: "social_network", label: "Red social", pluralLabel: "Redes (+#count)",
  options: [
    { value: "", id: "all_networks", label: "Todas las redes", isDefaultOption: true, allOptions: true },
    { value: "twitter", id: "twitter", label: "Twitter" },
    { value: "facebook", id: "facebook", label: "Facebook" },
    { value: "fanpage", id: "fanpage", label: "Fanpage" },
    { value: "instagram", id: "instagram", label: "Instagram" }
  ]
}

npm.io

npm.io

CustomOptions:

Los componentes Custom soportados por el Checkbox Component son:

  • PercentageOption
{
  ...
  
  customOption: {
    title: "Red personalizado",
    cancelLabel: "Cancelar",
    applyLabel: "Aplicar",
    linkLabel: "Range personalizado ...",
    type: "percentage_option",
    valueFormat: "#sValue_#iPercentage", //indicates field type using integer(i), string(s), float(f)
    labelFormat: "#value (mayor a #percentage%)",
    labels: {
      "twitter": "Twitter",
      "facebook": "Facebook",
    },
    options: {
      name: "custom_social_network",
      values: [
        { value: "twitter", label: "Twitter" },
        { value: "facebook", label: "Facebook" }
      ],
      percentages: [
        { value: 20, label: "mas del 20%" },
        { value: 30, label: "mas del 30%" },
      ],
      emptyPercentage: "Seleccione un porcentaje",
      error: {
        percentage: {
          required: "Debe seleccionar un porcentaje"
        },
        value: {
          required: "Debe seleccionar una opcion"
        }
      }
    },
    id: "custom-social-network"
  }
}

npm.io

Radio Component

{
  type: "radio", name: "followers", label: "Seguidores",
  options: [
    { value: "", id: "all_followers", label: "Cualquier cantidad", isDefaultOption: true },
    { value: "0-30000", id: "0_30000", label: "Entre 0 y 30,000" },
    { value: "30000-10000", id: "30000_10000", label: "Entre 30,000 y 100,000" },
  ]
}

npm.io

CustomOptions:

Los componentes Custom soportados por el Radio Component son:

  • RangeOption
{
  ...
  
  customOption: {
  title: "Rango personalizado",
  cancelLabel: "Cancelar",
  applyLabel: "Aplicar",
  linkLabel: "Rango personalizado ...",
  type: "range_option",
  valueFormat: "#iFrom-#iTo", //indicates field type using integer(i), string(s), float(f)
  labelFormat: "Desde #from hasta #to",
  options: {
    label: {
      from: "Desde",
      to: "Hasta",
    },
    error: {
      required: "Ambos valores son requeridos",
      positive: "Ambos valores deben ser mayores a cero",
      greater: "El limite superior debe ser mayor al inferior"
    }
  },
  id: "custom-followers"
}

npm.io

npm.io

npm.io

  • PercentageOption

Dropdown Component

{
  type: "dropdown", label: "Otras opciones",
  inputs: [
    {
      type: "radio", name: "account_type", label: "Clasificación de la cuenta",
      options: [
        { value: "", id: "all_accounts", label: "Todas", isDefaultOption: true },
        { value: "celebrity", id: "celebrity", label: "Celebridad" },
        { value: "professional", id: "professional", label: "Profesional" },
        { value: "citizen", id: "citizen", label: "Ciudadano" }
      ]
    },
    {
      type: "checkbox", name: "tags", label: "Ambito", pluralLabel: "Ambito (+#count)",
      options: [
        { value: "", id: "all_tags", label: "Todas las redes", isDefaultOption: true, allOptions: true },
        { value: "sport", id: "sport", label: "Deportes" },
        { value: "fashion", id: "fashion", label: "Moda" },
        { value: "cinema", id: "cinema", label: "Cine" }
      ]
    }
  ]
}

npm.io

InputSeletor Component

{
  type: "input_selector", title: "Selecciona la opción de búsqueda", keepValues: false
  inputs: [
    { type: "text", name: "screen_name", placeholder: "Nombre o username" }
    { type: "text", name: "category", placeholder: "Categoria" }
  ]
}

Genera un InputSelector con dos opciones de inputs para seleccionar el campo de busqueda

Opciones especiales

  • keepValues: true, mantiene el valor ingresado en el actual input al cambiar la seleccion de input
  • keepValues: false, le asigna al valor del input actual el emptyValue definido para él al cambiar el input seleccionado

    npm.io

Estilos Visuales del Componente

Existen dos versiones de estilos disponibles para agregar al componente, para usar una de las versiones debe importar la hoja de estilos de la siguiente manera en el componente donde sea importado FormBuilder:

import 'influtech-filters/dist/theme_v1.css'

o

import 'influtech-filters/dist/theme_v2.css'

Adicional debe agregar la clase 'theme-v1' 0 'theme-v2' al elemento html que preceda el renderizado del componente FormBuilder, ejemplo:

<div className='theme-v1'>
  <FormBuilder
    ...props
  />
</div>
1.0.47

5 years ago

1.0.46

5 years ago

1.0.45

5 years ago

1.0.44

5 years ago

1.0.43

5 years ago

1.0.42

5 years ago

1.0.41

5 years ago

1.0.40

5 years ago

1.0.39

5 years ago

1.0.38

5 years ago

1.0.37

5 years ago

1.0.36

5 years ago

1.0.35

5 years ago

1.0.33

5 years ago

1.0.30

5 years ago

1.0.29

6 years ago

1.0.28

6 years ago

1.0.27

6 years ago

1.0.26

6 years ago

1.0.25

6 years ago

1.0.24

6 years ago

1.0.23

6 years ago

1.0.22

6 years ago

1.0.21

6 years ago

1.0.20

6 years ago

1.0.19

6 years ago

1.0.18

6 years ago

1.0.17

6 years ago

1.0.16

6 years ago

1.0.15

6 years ago

1.0.14

6 years ago

1.0.13

6 years ago

1.0.12

6 years ago

1.0.11

6 years ago

1.0.10

6 years ago

1.0.9

6 years ago

1.0.8

6 years ago

1.0.7

6 years ago

1.0.6

6 years ago

1.0.5

6 years ago

1.0.4

6 years ago

1.0.3

6 years ago

1.0.2

6 years ago

1.0.1

6 years ago

1.0.0

6 years ago

0.1.0

6 years ago