IsDraggable
bulbasaur
#1
grass
poison
ivysaur
#2
grass
poison
venusaur
#3
grass
poison
charmander
#5
fire
charmeleon
#6
fire
charizard
#7
fire
flying
squirtle
#10
water
wartortle
#11
water
blastoise
#12
water
<script setup lang="ts">import { ref } from "vue";import { useDragAndDrop } from "fluid-dnd/vue";import type { Pokemon } from "./Pokemon";import PokemonComponent from "./PokemonComponent.vue";import { fetchPokemons } from "@/server/pokemonServer";
const pokemons = ref([] as Pokemon[]);pokemons.value = await fetchPokemons(9);const sizes = { 100: "S", 250: "M", 1200: "L",};const getSize = (weight: number) => { for (const sizeLimit of Object.keys(sizes)) { const limit = parseFloat(sizeLimit) as keyof typeof sizes; if (weight < limit) { return sizes[limit]; } }};const [ parent ] = useDragAndDrop(pokemons, { isDraggable: (el) => !el.classList.contains("is-not-draggable"), draggingClass: "dragging-pokemon",});</script><template> <div class="flex max-sm:justify-center items-start"> <div ref="parent" class="bg-gray-200/60 border-solid border-black/40 rounded-2xl w-60 border-4 p-4 block" > <PokemonComponent v-for="(pokemon, index) in pokemons" :key="pokemon.name" :index="index" :pokemon="pokemon" :class="{ 'is-not-draggable': getSize(pokemon.weight) === 'L', }" /> </div> </div></template><style>.is-not-draggable { background-color: gray !important;}</style>