├── .env.example ├── .eslintrc.cjs ├── .gitignore ├── README.md ├── components.json ├── drizzle.config.ts ├── next.config.js ├── package.json ├── pnpm-lock.yaml ├── postcss.config.cjs ├── prettier.config.js ├── public └── favicon.ico ├── scripts ├── console.ts ├── create-product-params-schema.ts └── seed │ ├── cozy.ts │ ├── product-variants.json │ ├── products.json │ └── random.ts ├── src ├── app │ ├── actions.ts │ ├── layout.tsx │ ├── loaders.ts │ ├── page.tsx │ ├── product │ │ └── new │ │ │ └── page.tsx │ └── variant │ │ └── page.tsx ├── components │ ├── add-option-dialog.tsx │ ├── add-option-form.tsx │ ├── add-product-form.tsx │ ├── add-variant-dialog.tsx │ ├── add-variant-form.tsx │ ├── icons.tsx │ ├── mobile-filters.tsx │ ├── pagination.tsx │ ├── placeholder-image.tsx │ ├── product-card.tsx │ ├── product-filters.tsx │ ├── product-variants-form.tsx │ ├── products-pagination.tsx │ ├── search-input.tsx │ ├── selected-options.tsx │ ├── ui │ │ ├── accordion.tsx │ │ ├── aspect-ratio.tsx │ │ ├── badge.tsx │ │ ├── button.tsx │ │ ├── card.tsx │ │ ├── checkbox.tsx │ │ ├── dialog.tsx │ │ ├── drawer.tsx │ │ ├── dropdown-menu.tsx │ │ ├── form.tsx │ │ ├── input.tsx │ │ ├── label.tsx │ │ ├── pagination.tsx │ │ ├── scroll-area.tsx │ │ ├── select.tsx │ │ ├── separator.tsx │ │ ├── skeleton.tsx │ │ └── sonner.tsx │ └── variant-block.tsx ├── env.js ├── hooks │ ├── use-pagination.tsx │ └── use-uncontrolled.tsx ├── lib │ ├── utils.ts │ └── validations │ │ ├── option.ts │ │ ├── product.ts │ │ ├── search-params.ts │ │ └── variant.ts ├── server │ └── db │ │ ├── index.ts │ │ └── schema.ts ├── styles │ └── globals.css └── types │ └── index.ts ├── start-database.sh ├── tailwind.config.ts └── tsconfig.json /.env.example: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/.env.example -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/.eslintrc.cjs -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/.gitignore -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/README.md -------------------------------------------------------------------------------- /components.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/components.json -------------------------------------------------------------------------------- /drizzle.config.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/drizzle.config.ts -------------------------------------------------------------------------------- /next.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/next.config.js -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/package.json -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/pnpm-lock.yaml -------------------------------------------------------------------------------- /postcss.config.cjs: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/postcss.config.cjs -------------------------------------------------------------------------------- /prettier.config.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/prettier.config.js -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/public/favicon.ico -------------------------------------------------------------------------------- /scripts/console.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/scripts/console.ts -------------------------------------------------------------------------------- /scripts/create-product-params-schema.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/scripts/create-product-params-schema.ts -------------------------------------------------------------------------------- /scripts/seed/cozy.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/scripts/seed/cozy.ts -------------------------------------------------------------------------------- /scripts/seed/product-variants.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/scripts/seed/product-variants.json -------------------------------------------------------------------------------- /scripts/seed/products.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/scripts/seed/products.json -------------------------------------------------------------------------------- /scripts/seed/random.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/scripts/seed/random.ts -------------------------------------------------------------------------------- /src/app/actions.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/app/actions.ts -------------------------------------------------------------------------------- /src/app/layout.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/app/layout.tsx -------------------------------------------------------------------------------- /src/app/loaders.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/app/loaders.ts -------------------------------------------------------------------------------- /src/app/page.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/app/page.tsx -------------------------------------------------------------------------------- /src/app/product/new/page.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/app/product/new/page.tsx -------------------------------------------------------------------------------- /src/app/variant/page.tsx: -------------------------------------------------------------------------------- 1 | export function VariantPage() { 2 | 3 | } -------------------------------------------------------------------------------- /src/components/add-option-dialog.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/add-option-dialog.tsx -------------------------------------------------------------------------------- /src/components/add-option-form.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/add-option-form.tsx -------------------------------------------------------------------------------- /src/components/add-product-form.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/add-product-form.tsx -------------------------------------------------------------------------------- /src/components/add-variant-dialog.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/add-variant-dialog.tsx -------------------------------------------------------------------------------- /src/components/add-variant-form.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/add-variant-form.tsx -------------------------------------------------------------------------------- /src/components/icons.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/icons.tsx -------------------------------------------------------------------------------- /src/components/mobile-filters.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/mobile-filters.tsx -------------------------------------------------------------------------------- /src/components/pagination.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/pagination.tsx -------------------------------------------------------------------------------- /src/components/placeholder-image.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/placeholder-image.tsx -------------------------------------------------------------------------------- /src/components/product-card.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/product-card.tsx -------------------------------------------------------------------------------- /src/components/product-filters.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/product-filters.tsx -------------------------------------------------------------------------------- /src/components/product-variants-form.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/product-variants-form.tsx -------------------------------------------------------------------------------- /src/components/products-pagination.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/products-pagination.tsx -------------------------------------------------------------------------------- /src/components/search-input.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/search-input.tsx -------------------------------------------------------------------------------- /src/components/selected-options.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/selected-options.tsx -------------------------------------------------------------------------------- /src/components/ui/accordion.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/ui/accordion.tsx -------------------------------------------------------------------------------- /src/components/ui/aspect-ratio.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/ui/aspect-ratio.tsx -------------------------------------------------------------------------------- /src/components/ui/badge.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/ui/badge.tsx -------------------------------------------------------------------------------- /src/components/ui/button.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/ui/button.tsx -------------------------------------------------------------------------------- /src/components/ui/card.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/ui/card.tsx -------------------------------------------------------------------------------- /src/components/ui/checkbox.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/ui/checkbox.tsx -------------------------------------------------------------------------------- /src/components/ui/dialog.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/ui/dialog.tsx -------------------------------------------------------------------------------- /src/components/ui/drawer.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/ui/drawer.tsx -------------------------------------------------------------------------------- /src/components/ui/dropdown-menu.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/ui/dropdown-menu.tsx -------------------------------------------------------------------------------- /src/components/ui/form.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/ui/form.tsx -------------------------------------------------------------------------------- /src/components/ui/input.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/ui/input.tsx -------------------------------------------------------------------------------- /src/components/ui/label.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/ui/label.tsx -------------------------------------------------------------------------------- /src/components/ui/pagination.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/ui/pagination.tsx -------------------------------------------------------------------------------- /src/components/ui/scroll-area.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/ui/scroll-area.tsx -------------------------------------------------------------------------------- /src/components/ui/select.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/ui/select.tsx -------------------------------------------------------------------------------- /src/components/ui/separator.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/ui/separator.tsx -------------------------------------------------------------------------------- /src/components/ui/skeleton.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/ui/skeleton.tsx -------------------------------------------------------------------------------- /src/components/ui/sonner.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/ui/sonner.tsx -------------------------------------------------------------------------------- /src/components/variant-block.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/components/variant-block.tsx -------------------------------------------------------------------------------- /src/env.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/env.js -------------------------------------------------------------------------------- /src/hooks/use-pagination.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/hooks/use-pagination.tsx -------------------------------------------------------------------------------- /src/hooks/use-uncontrolled.tsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/hooks/use-uncontrolled.tsx -------------------------------------------------------------------------------- /src/lib/utils.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/lib/utils.ts -------------------------------------------------------------------------------- /src/lib/validations/option.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/lib/validations/option.ts -------------------------------------------------------------------------------- /src/lib/validations/product.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/lib/validations/product.ts -------------------------------------------------------------------------------- /src/lib/validations/search-params.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/lib/validations/search-params.ts -------------------------------------------------------------------------------- /src/lib/validations/variant.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/lib/validations/variant.ts -------------------------------------------------------------------------------- /src/server/db/index.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/server/db/index.ts -------------------------------------------------------------------------------- /src/server/db/schema.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/server/db/schema.ts -------------------------------------------------------------------------------- /src/styles/globals.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/styles/globals.css -------------------------------------------------------------------------------- /src/types/index.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/src/types/index.ts -------------------------------------------------------------------------------- /start-database.sh: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/start-database.sh -------------------------------------------------------------------------------- /tailwind.config.ts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/tailwind.config.ts -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/danolekh/product-filtering-example/HEAD/tsconfig.json --------------------------------------------------------------------------------