Skip to content

Instantly share code, notes, and snippets.

View codigoconjuan's full-sized avatar

Juan Pablo De la torre Valdez codigoconjuan

View GitHub Profile
@codigoconjuan
codigoconjuan / DeleteProductModal.tsx
Last active July 16, 2025 14:49
Modal para Eliminar Producto en Astro
import { Dialog, DialogBackdrop, DialogPanel, DialogTitle } from '@headlessui/react'
import { XMarkIcon } from '@heroicons/react/24/outline'
export default function DeleteProductModal() {
return (
<div>
<Dialog open={true} onClose={() => {} } className="relative z-10">
<DialogBackdrop
transition
@codigoconjuan
codigoconjuan / products.ts
Created July 9, 2025 20:02
Body para el Product Action de Astro
const body = {
title: input.title,
freshcoffee_categories: input.freshcoffee_category,
featured_media: input.featured_media,
status: 'publish',
...(input.variable_price === "true" ? {
acf: {
variable_price: input.variable_price,
small: {
size: 'Chico',
@codigoconjuan
codigoconjuan / product.action.schema.ts
Created July 9, 2025 19:40
Action de Zod para validación de Productos
import { nullToEmptyString } from '@/utils'
import { z } from 'astro:schema'
const CommonFields = {
title: z.preprocess(
nullToEmptyString,
z.string().trim().min(1, { message: 'El Título no puede ir vacío' }),
),
featured_media: z.preprocess(
nullToEmptyString,
@codigoconjuan
codigoconjuan / ProductPriceField.vue
Created July 9, 2025 18:36
Componentes de Precio Fijo y Variable en Vue y Astro
<template>
<div class="col-span-full">
<label for="price" class="block text-sm/6 font-medium text-gray-900">
Precio del Producto:
</label>
<div class="mt-2">
<input
id="price"
name="price"
type="number"
@codigoconjuan
codigoconjuan / VariablePriceCheck.vue
Created July 9, 2025 17:36
Precios Variables en Astro, Vue y WordPress
<template>
<div class="grid max-w-2xl grid-cols-1 gap-x-6 gap-y-8 sm:grid-cols-6 md:col-span-2">
<div class="col-span-full">
<div class="mt-6 space-y-6">
<div class="flex gap-3">
<div class="flex h-6 shrink-0 items-center">
<div class="group grid size-4 grid-cols-1">
<input
id="variable_price" type="checkbox" aria-describedby="comments-description"
@codigoconjuan
codigoconjuan / UploadImage.tsx
Created July 8, 2025 23:41
Componente para Drag N Drop con Astro y WordPress
<div className="col-span-full">
<label
htmlFor="cover-photo"
className="block text-sm/6 font-medium text-gray-900">{label}
</label>
<div {...getRootProps({
className: `
mt-2 py-20 outline-1 outline-dashed -outline-offset-1 outline-gray-300 text-center
${isDragActive ? 'outline-gray-900 text-gray-900 bg-gray-200 ' : 'border-gray-400 text-gray-400 bg-white'}
${isDragReject ? 'border-none cursor-not-allowed' : ''}
@codigoconjuan
codigoconjuan / 1) new.astro
Last active July 16, 2025 14:43
Formulario de Productos en Astro y WordPress
---
import AdminLayout from "@/layouts/AdminLayout.astro";
---
<AdminLayout title='Nuevo Producto'>
<form class="mx-auto max-w-4xl">
<!-- ProductForm -->
<div class="mt-6 flex items-center justify-end gap-x-6">
<button
type="submit"
@codigoconjuan
codigoconjuan / ProductsMenu.tsx
Last active July 16, 2025 14:40
Menú de Acciones para Admin de Productos
import { Menu, MenuButton, MenuItem, MenuItems } from '@headlessui/react'
import { EllipsisVerticalIcon } from '@heroicons/react/20/solid'
type Props = {
name: string
id: number
}
export default function ProductMenu({name, id}: Props) {
@codigoconjuan
codigoconjuan / AdminProductsLayout.astro
Last active July 16, 2025 14:42
Panel de Administración FreshCoffee - Astro y WordPress
---
import AdminLayout from "./AdminLayout.astro";
interface Props {
title: string
}
const { title} = Astro.props;
---
<AdminLayout title={title}>
<slot name="before-products-table" />
@codigoconjuan
codigoconjuan / OrderCard.tsx
Created July 5, 2025 23:07
Componente para mostrar contenidos de la Orden
<div className="p-5 shadow-lg space-y-5 border border-gray-200 ">
<div className='text-sm grid grid-cols-2 justify-between text-gray-600'>
<h2>ID Orden: <span className='font-black'></span></h2>
<p className='text-right'>Cliente: </p>
</div>
<div>
Contenido:
<div></div>
</div>