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

reparoevo

v1.5.6

Published

Repositorio Reparo Evo

Downloads

5

Readme

Documentación de Componentes

SysLogin

Componente para el manejo de la sesión de usuario

  props: {
      endpoint: {
          type: String,
          default: "http://localhost:3001",
      },
      data: {
          type: String,
          default: ''
      },
      showLogin: {
          type: Boolean,
          default: false,
      },
        showNav: {
        type: Boolean,
        default: true,
      },
  }
  • Para el desarrollo no es necesario pasar endpoint, para producción hay que pasar por parámetros una variable de entorno que apunte al servidor.

  • data será la variable del componente padre donde podrá recibir la información de logeo (la respuesta del axios)

  • showLogin es un booleano que si se desea, puede mostrar el cartel de inicio de sesión, de lo contrario solo mostrara un "loading"

  • showNav: por defecto este componente muestra la navbar, si no se desea mostrar se puede pasar :showNav="false"

Modo de uso

Importar en el App del proyecto de Vue, esto provocará que toda la aplicación esté protegida por el inicio de sesión.

El App quedaría así:


<template>
  <SysLogin :data="data" @update:data="data = $event" />    
  <router-view />
</template>

<script>
import { onMounted, ref, watch } from "vue";
import { SysLogin } from 'reparorepo';

export default {
  name: "App",
  components: {
    SysLogin,
  },
  setup() {
    const data = ref(null);
   
    onMounted(() => {
      try {
        console.log("data iniciada:", JSON.parse(localStorage.userData));
      } catch (err) {
        console.log("data iniciada:", "Sin userData");
      }
    })

    watch(data, (newData) => {
      console.log("data actualizada:", newData);
    });

    return {
      data,
    };
  },
};
</script>

El onMounted es para cuando la sesión está guardada en el localStorage del navegador

El watch es para cuando el usuario tiene que iniciar sesión.

En cualquier caso, en data, quedaría un objeto con los datos que se reciben del backend.

Button

Props y formatos

props: {
        color: {
            type: String,
            default: "success",
        },
        size: {
            type: String,
            default: "md",
        },
        variant: {
            type: String,
            default: "fill",
        },
        fullWidth: {
            type: Boolean,
            default: false,
        },
        active: {
            type: Boolean,
            default: false,
        },
        onClick: {
            type: Function,
            default: () => { },
        },
    },

Pueden pasarse colores como success, danger, warning...

Pasar como prop en onClick la función con la acción que desee que realice el botón.

CurrencyInput

Este componente sirve para mostrar los valores en formato de moneda Se usa igual que el Input pero para actualizar los datos se necesita usar el v-model.

Modo de uso

  <CurrencyInput
    class="form-control px-2"
    v-model="alicuota.gravado"
    :name="'gravado'"
    :onChange="(e) => alicuotasChange(e, ix)"
    :value="alicuota.gravado"
  />

Props y formatos

props: {
        color: {
            type: String,
            default: "success",
        },
        size: {
            type: String,
            default: "md",
        },
        variant: {
            type: String,
            default: "fill",
        },
        fullWidth: {
            type: Boolean,
            default: false,
        },
        active: {
            type: Boolean,
            default: false,
        },
        onClick: {
            type: Function,
            default: () => { },
        },
    },

AsyncSelect

Props y formatos

props: {
    label: { type: String },
    name: { type: String },
    placeholder: { type: String },
    className: { type: String },
    asyncFetch: { type: Function },
    minimun: { type: Number, default: 3 },
  }

Modo de uso

Usar el componente como uno más, pasando por props, la función de fetching (llamado), ésta recibirá el resultado de la llamada:

    const handleFetching = (result) => {
      console.log(result);
      return result;
    };

El select termina devolviendo un objeto, que dentro esta el value, es para tener la posibilidad de en el mismo llamado devolver mas informacion que se necesite y evitar otro llamado.

    <AsyncSelect
        label="Entidad cta/cte"
        name="proveedor"
        className="w-50"
        @update:selectedResult="handleSelectedProveedor"
        :asyncFetch="asyncFetch"
        placeholder="Escribe 3 caracteres mínimo para realizar la búsqueda.."
        :minimun="3"
    />

*La propiedad minimun permite establecer el minimo de caracteres necesarios para hacer el primer llamado.

Este componente se renderizó con lo básico, pero pueden pasarse mas props

Select

Props y formatos

props: {
    label: {
      type: String,
      default: "Select de opciones",
    },
    options: {
      type: Array,
      required: true,
    },
    value: {
      type: [String, Number],
      default: "",
    },
    className: {
      type: String,
    },
    placeholder: {
      type: String,
      default: "Seleccione una opción",
    },
    isDisabled: {
      type: Boolean,
    },
}

El componente puede recibir estas 6 propiedades, siendo obligatoria unicamente "options". Dicha propiedad debe ser un array de objetos, donde cada uno de ellos debe ser de la forma { label: 'Texto de ejemplo', value: 'Valor de ejemplo', ...props }

Modo de uso

  <Select
  :options="[{ value: '2', label: 'Texto de ejemplo', ...props}]"
  :className="clase de bootstrap"
  :isDisabled="false"
  placeholder="Seleccionar / Buscar"
  @onChange="miFuncion" 
  :value="2" //(Si deseamos que se inicialice con un value determinado).
  />

Sidebar

Props y formatos

props: {
    textTitle: {
      type: String,
      default: "Primer título",
    },
    textSubtitle: {
      type: String,
      default: "Segundo Título",
    },
    className: {
      type: String,
    },
    first_items: {
      type: Array,
      default: [
        { name: "Dashboard", url: "login", icon: "fa-solid fa-chart-line" },
      ],
    },
    second_items: {
      type: Array,
      default: [
        { name: "Profile", url: "profile", icon: "fa-solid fa-id-card" },
      ],
    },
}

El componente puede recibir estas 5 propiedades, de las cuales "first_items" y "second_items" no son obligatorias, pero si son requeridas para renderizar contenido. Ambas son arrays de objetos de la forma especificada abajo. ("name, url de redirección e ícono"). Además, puede recibir un slot (hijo), que se ubicará como button.

 <Sidebar
    textTitle="Texto de ejemplo"
    textSubtitle="Texto de Ejemplo"
    first_items="[{ name: 'Dashboard', url: 'login', icon: 'fa-solid fa-chart-line' }]"
    second_items="[{ name: 'Profile', url: 'profile', icon: 'fa-solid fa-id-card' }]"
    className="clase de bootstrap"
    >
      <Button>Ejemplo</Button>
 </Sidebar>

Table

Props y formatos

props: {
    title: {
      type: String,
      default: "Tabla de Usuarios",
    },
    columns: {
      type: Array,
      required: true,
    },
    rows: {
      type: Array,
      required: true,
    },
    className: {
      type: String,
      default: "",
    },
};

El componente puede recibir estas 4 propiedades, de las cuales "columns" y "rows" son obligatorias pararenderizar contenido. Ambas son arrays de objetos de la forma:


const rows = ref([
      {
        name: "Usuario",
        codemp: 2,
        email: "[email protected]",
        state: "Activo",
      }]);

const columns = ref([
      { value: 1, label: "Nombre completo", key: "name" },
    ]);

Modo de uso

<Table
 :columns="columns"
 :rows="rows"
 className="clase de bootstrap"
 title="Tabla de Usuarios"
/> 

Card

Props y formatos

props: {
    icon: {
      type: [String, Object],
      component: {
        type: String,
      },
      background: {
        type: String,
      },
      default: () => ({
        background: "bg-white",
      }),
    },
    title: {
      type: String,
      required: true,
    },
    description: {
      type: String,
    },
    value: {
      type: [String, Number],
    },
    className: {
      type: String,
    },
    onClick: {
      type: Function,
    },
};

El componente puede recibir propiedades, de las cuales solo el titulo es obligatoria. Además, puede recibir un slot.

Modo de uso

<Card
  className="clase de bootstrap"
  title="Nombre de Usuario"
  icon="text-white fas fa-landmark"
  description="Masivos"
  value="Mutual"
  :onClick="miFuncion"
> 
  <div>
      <OtroComponente />
  </div>
</Card>

GroupOption

Props y formatos

  props: {
    options: {
      type: Array,
      required: true,
    },
    id: {
      type: String,
      required: false,
      default: 1,
    },
    onChange: {
      type: Function,
      required: false,
      default: (e) => console.log("onChange", e)
    },
    className: {
      type: String,
      required: false,
    }
  }

Modo de uso

Aquí hay un ejemplo de uso, tener en cuenta que en options el valor seleccionado por defecto se marca con un booleano selected:

    <GroupOption :id="'1'" :options="options" :onChange="handleOptionSelected" />
    const options = [
      { value: 1, label: "Texto 1", selected: false },
      { value: 2, label: "Texto 2", selected: false },
      { value: 3, label: "Texto 3", selected: true },
      { value: 4, label: "Texto 4", selected: false },
    ]
    const handleOptionSelected = (selectedValue) => {
      console.log(selectedValue)
      // Devuelveel objeto: { value: 4, label: "Texto 4", selected: true }
      // Puedes realizar las acciones necesarias con el valor seleccionado
    }

el 'id' es importante si se usan varios GroupOption en el programa

Switch

Props y formatos

  props: {
    name: {
        type: String,
        required: true,
    },
    id: {
        type: String,
        required: true,
    },
    checked: {
        type: Boolean,
        default: false,
    },
    className: {
        type: String,
        default: "",
    },
    label: {
        type: String,
        required: false,
        default: "",
    },
    onChange: {
        type: Function,
        default: (e) => console.log(e.target.value),
    },
    disabled: {
        type: Boolean,
        default: false
    }
    }

Modo de uso

Aquí hay un ejemplo de uso

    <Switch label="hola" id="1" name="test" :checked="true" :onChange="handleSwitch" />
    
    const handleSwitch = (e) => {
      console.log({ name: e.target.name, checked: e.target.checked })
    }

name es la propiedad name pasada, en el ejemplo sería 'test', y checked es un booleano indicando el estado del Switch

Upload

Props y formatos

props: {
    nameFile: {
      type: String,
    },
    path: {
      type: String,
    },
    fileExtension: {
      type: Array,
    },
    multiple: {
      type: Boolean,
    },
    endpoint: {
      type: String,
    },
  },


Modo de uso

Aquí hay un ejemplo de uso

<Upload :endopoint="'localhost:3002/upload'" :multiple="true" :fileExtension="['.jpg', '.png']" :path="'archivosExcel'" :nameFile="'comprobanteExcel'"/>

  • endopoint: iria la url del servidor donde estaria el node levantado (porej servidor de vue), a /upload, ya que, el servidor podria usarse para otra cosa

  • multiple: si queremos que se puedan subir varios archivos

  • fileExtension: se le pasa un array con las extensiones que se quieren aceptar, sino acepta todo tipo de archivo

  • path: en que carpeta del servidor al que apunta se quiere guardar, por ej, 'imagenes', te lo tiraria a una carpeta imagenes, que si no existe se crea

  • nameFile: si se desea que los archivos tengan un nombre en particular se le pasa esta prop, sin extension. Le pone la extension del archivo original

Offcanvas

Props y formatos

props: {
    label:{
      type: String,
      default: 'Offcanvas'
    }
  },


Modo de uso

Aquí hay un ejemplo de uso

<Offcanvas :label="'Subir Excel'">
      <template v-slot:mostrar>
        <svg
          class="botonStyle"
          data-bs-toggle="offcanvas"
          data-bs-target="#offcanvasRight"
          aria-controls="offcanvasRight"
          xmlns="http://www.w3.org/2000/svg"
          height="16"
          width="16"
          fill="black"
          viewBox="0 0 512 512"
        >
          <path
            d="M288 109.3V352c0 17.7-14.3 32-32 32s-32-14.3-32-32V109.3l-73.4 73.4c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3l128-128c12.5-12.5 32.8-12.5 45.3 0l128 128c12.5 12.5 12.5 32.8 0 45.3s-32.8 12.5-45.3 0L288 109.3zM64 352H192c0 35.3 28.7 64 64 64s64-28.7 64-64H448c35.3 0 64 28.7 64 64v32c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V416c0-35.3 28.7-64 64-64zM432 456a24 24 0 1 0 0-48 24 24 0 1 0 0 48z"
          />
        </svg>
      </template>
      <template v-slot:contenido>
        <Upload />
      </template>
    </Offcanvas>
  • el componente recibe dos slot:

    • el primera con el nombre de "mostrar" que va a ser lo que se visualice para abrir el offcanvas
    • y el segundo con el nombre contenido, el cual hace referencia a tood lo que se ve adentro del offcanvas
  • y el label es para el titulo que tendra adentro el offcanvas