Skip to content

Instantly share code, notes, and snippets.

View leonardof02's full-sized avatar

Leonardo Fabian Arencibia Arteaga leonardof02

View GitHub Profile
@leonardof02
leonardof02 / Heatmap.tsx
Created May 1, 2026 21:16
Github Heatmap Exercise
/**
* A Heatmap component that displays the contributions of a user in a Github format
*
*/
const getDayOfYear = (date: string): number => {
const [dia, mes, anio] = date.split('/').map(Number);
const formattedDate = new Date(anio, mes - 1, dia);;
const start = new Date(formattedDate.getFullYear(), 0, 0);
const diff = formattedDate.getTime() - start.getTime();
const oneDay = 1000 * 60 * 60 * 24;
@leonardof02
leonardof02 / Slider.tsx
Created April 21, 2025 22:02
React Native Custom Input Slider
import React, { useEffect, useState } from "react";
import Animated, {
useSharedValue,
useAnimatedStyle,
runOnJS,
} from "react-native-reanimated";
import Ionicons from "@expo/vector-icons/Ionicons";
@leonardof02
leonardof02 / linkedin_upload_content.md
Last active April 23, 2025 13:04
Guide for upload content for LinkedIn via API

Acceso a la API

Important

Las acciones permitidas a cualquier empresa o desarrollador son poder autenticarse con LinkedIn usando OAuth y publicar contenido en su perfil

Para poder conectarse a la API de LinkedIn:

Lo primero es crear la app (equivalente a un bot) con los accesos correspondientes

  1. Crearse una página en LinkedIn (de empresa o escuela)
  2. Crearse una app y linkearla a la página
@leonardof02
leonardof02 / ExampleTable.tsx
Created July 3, 2024 19:48
Generic Table used in Merco Sistema at NOX Creation
// This is an example table using the GenericTableComponent.tsx
// mockData is generated randomly
import { Image, Text, Checkbox, Badge, Box, Flex } from "@chakra-ui/react";
import { ColumnDef } from "@tanstack/react-table";
import React from "react";
import GenericTable from "@/frontend/core/components/GenericTable";
import TransitActionsButtonGroup from "./TransitTableActions";
import { formatDate } from "@/frontend/core/utils/formatDate";
import { ChevronDownIcon, ChevronRightIcon } from "@chakra-ui/icons";
@leonardof02
leonardof02 / main.py
Created May 18, 2024 18:23
Connect python-telegram-bot to Google Sheet
import gspread
from gspread.spreadsheet import Spreadsheet
from google.oauth2.service_account import Credentials
SHEET_ID = "<ID de la hoja de calculo>"
BOT_TOKEN = "<El token del bot>"
scopes = [ "https://www.googleapis.com/auth/spreadsheets" ]
creds = Credentials.from_service_account_file(credentials_path, scopes=scopes)
client = gspread.authorize(creds)
@leonardof02
leonardof02 / KeenSliderExample.breakpoints.ts
Last active April 25, 2024 20:09
Slider / Carrousel Solutions
const breakpoints = {
"(min-width: 1241px)": {
slides: {
perView: 3,
},
},
"(max-width: 1240px)": {
slides: {
perView: 3,
},
@leonardof02
leonardof02 / HeroContentBanner.tsx
Last active April 25, 2024 19:52
How to make a Fade Hero Content Banner with different screens
​/* eslint-disable @next/next/no-img-element */
import { Box, Button } from "@chakra-ui/react";
import React, { useEffect, useState } from "react";
import FirstContent from "./FirstContent";
import HeroQuestion from "./HeroQuestion";
import { CSSTransition } from "react-transition-group";
const questions = [
{
question: "Sabias que un juicio puede durar mucho?",
@leonardof02
leonardof02 / useImagePreview.ts
Last active February 2, 2024 20:35
React Hooks that made my life easier
/* eslint-disable react-hooks/exhaustive-deps */
import { useState, useEffect } from "react";
/**
* Hook para visualizar la imagen pasada como parametro a traves de su URL
* @param imageFile La imagen en formato de archivo (File o Blob)
* @returns Un url que respresenta la vista de la imagen (Ej: `<img src={previewUrl}/>` mostrará la imagen)
*/
export default function useImagePreview(imageFile?: File[]) {
const [previewUrl, setPreviewUrl] = useState<string | null>(null);
@leonardof02
leonardof02 / controller_with_class.py
Last active February 2, 2024 03:36
Python Telegram Bot Boilerplates
from telegram import Update, ReplyKeyboardMarkup, ReplyKeyboardRemove
from telegram.ext import ContextTypes, CallbackContext, filters, ConversationHandler, CommandHandler, MessageHandler
from Controllers.UserController import UserController
from Controllers.PersonController.ConversationStates import ConversationStates
from Constants.CallbackDataActions import Actions
from Models.Person import Person
from Helpers.Validator import Validator
@leonardof02
leonardof02 / PersonAsyncNotifierProvider.dart
Created December 18, 2023 20:26
Example of Riverpod AsyncNotifierProvider
class PersonController extends AsyncNotifier<List<Person>> {
Future<List<Person>> getPersonList() async {
final prefs = await SharedPreferences.getInstance();
final jsonString = prefs.getString("persons") ?? "[]";
final personList = (jsonDecode(jsonString) as List);
return personList.map((e) => Person.fromJson(e)).toList().cast<Person>();
}
@override
FutureOr<List<Person>> build() async {