diff --git a/package.json b/package.json index ead60fc..161e3df 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "laravel-vite-plugin": "^2.0.0", "lucide-vue-next": "^0.468.0", "pinia": "^3.0.3", - "reka-ui": "^2.6.0", + "reka-ui": "^2.6.1", "tailwind-merge": "^3.2.0", "tailwindcss": "^4.1.1", "tw-animate-css": "^1.2.5", diff --git a/resources/js/components/ui/tabs/Tabs.vue b/resources/js/components/ui/tabs/Tabs.vue index 1c11668..edddccc 100644 --- a/resources/js/components/ui/tabs/Tabs.vue +++ b/resources/js/components/ui/tabs/Tabs.vue @@ -1,23 +1,15 @@ - + diff --git a/resources/js/components/ui/tabs/TabsContent.vue b/resources/js/components/ui/tabs/TabsContent.vue index 3186ee8..c3b555f 100644 --- a/resources/js/components/ui/tabs/TabsContent.vue +++ b/resources/js/components/ui/tabs/TabsContent.vue @@ -12,8 +12,7 @@ const delegatedProps = reactiveOmit(props, "class") diff --git a/resources/js/components/ui/tabs/TabsList.vue b/resources/js/components/ui/tabs/TabsList.vue index a64a2da..19d766e 100644 --- a/resources/js/components/ui/tabs/TabsList.vue +++ b/resources/js/components/ui/tabs/TabsList.vue @@ -12,10 +12,9 @@ const delegatedProps = reactiveOmit(props, "class") diff --git a/resources/js/components/ui/tabs/TabsTrigger.vue b/resources/js/components/ui/tabs/TabsTrigger.vue index 2dfc6c5..3e43d53 100644 --- a/resources/js/components/ui/tabs/TabsTrigger.vue +++ b/resources/js/components/ui/tabs/TabsTrigger.vue @@ -14,13 +14,14 @@ const forwardedProps = useForwardProps(delegatedProps) - + + + diff --git a/resources/js/components/ui/tags-input/TagsInput.vue b/resources/js/components/ui/tags-input/TagsInput.vue new file mode 100644 index 0000000..356ae00 --- /dev/null +++ b/resources/js/components/ui/tags-input/TagsInput.vue @@ -0,0 +1,20 @@ + + + + + + + diff --git a/resources/js/components/ui/tags-input/TagsInputInput.vue b/resources/js/components/ui/tags-input/TagsInputInput.vue new file mode 100644 index 0000000..064822f --- /dev/null +++ b/resources/js/components/ui/tags-input/TagsInputInput.vue @@ -0,0 +1,17 @@ + + + + + diff --git a/resources/js/components/ui/tags-input/TagsInputItem.vue b/resources/js/components/ui/tags-input/TagsInputItem.vue new file mode 100644 index 0000000..a678d7e --- /dev/null +++ b/resources/js/components/ui/tags-input/TagsInputItem.vue @@ -0,0 +1,19 @@ + + + + + + + diff --git a/resources/js/components/ui/tags-input/TagsInputItemDelete.vue b/resources/js/components/ui/tags-input/TagsInputItemDelete.vue new file mode 100644 index 0000000..9ec0acb --- /dev/null +++ b/resources/js/components/ui/tags-input/TagsInputItemDelete.vue @@ -0,0 +1,22 @@ + + + + + + + + + diff --git a/resources/js/components/ui/tags-input/TagsInputItemText.vue b/resources/js/components/ui/tags-input/TagsInputItemText.vue new file mode 100644 index 0000000..3aac329 --- /dev/null +++ b/resources/js/components/ui/tags-input/TagsInputItemText.vue @@ -0,0 +1,17 @@ + + + + + diff --git a/resources/js/components/ui/tags-input/index.ts b/resources/js/components/ui/tags-input/index.ts new file mode 100644 index 0000000..8736692 --- /dev/null +++ b/resources/js/components/ui/tags-input/index.ts @@ -0,0 +1,5 @@ +export { default as TagsInput } from "./TagsInput.vue" +export { default as TagsInputInput } from "./TagsInputInput.vue" +export { default as TagsInputItem } from "./TagsInputItem.vue" +export { default as TagsInputItemDelete } from "./TagsInputItemDelete.vue" +export { default as TagsInputItemText } from "./TagsInputItemText.vue" diff --git a/resources/js/pages/Customers.vue b/resources/js/pages/Customers.vue index daf7ae0..ced8626 100644 --- a/resources/js/pages/Customers.vue +++ b/resources/js/pages/Customers.vue @@ -284,7 +284,7 @@ const call = (number: string, event: Event) => { + class="fill-popover drop-shadow-(--shadow-arrow) stroke-[0.5px] stroke-border -mt-px" /> diff --git a/resources/js/pages/Products.vue b/resources/js/pages/Products.vue index 3b36903..b023e2d 100644 --- a/resources/js/pages/Products.vue +++ b/resources/js/pages/Products.vue @@ -6,12 +6,12 @@ import { Product } from '@/types'; import Fuse from 'fuse.js'; import { Input } from '@/components/ui/crm-input' import { Button } from '@/components/ui/crm-button' -import { Delete, Search, Plus } from "lucide-vue-next" +import { Delete, Search, Plus, CheckIcon, ChevronDown } from "lucide-vue-next" import PlaceholderPattern from '@/components/PlaceholderPattern.vue'; import { toCurrency, toRoundedCurrency } from '@/lib/utils'; import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from '@/components/ui/tooltip' import { Kbd, KbdGroup } from '@/components/ui/kbd' -import { Toggle } from '@/components/ui/toggle' +import { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectTrigger, SelectValue, SelectSeparator } from '@/components/ui/select' interface Props { productsData: Product[]; @@ -21,6 +21,7 @@ const searchQuery = ref('') const searchField = ref() const categoryVisibility = ref>({}); +const selectedCategory = ref("all") onMounted(() => { initializeCategoryVisibility(); @@ -40,11 +41,6 @@ const fuse = computed(() => { }) const filteredProducts = computed(() => { - const visibleCategories = Object.entries(categoryVisibility.value) - .filter(([_, isVisible]) => isVisible) - .map(([categoryName]) => categoryName); - - if (visibleCategories.length == 0) return [] let products = props.productsData; @@ -54,9 +50,12 @@ const filteredProducts = computed(() => { } // Filter nach Kategorien - products = products.filter(product => - product.category?.name && visibleCategories.includes(product.category.name) - ); + if (selectedCategory.value !== "all") { + products = products.filter(product => + product.category?.name && + product.category.name == selectedCategory.value + ); + } return products; }); @@ -71,6 +70,7 @@ const categories = computed(() => { return Array.from(categorySet).sort(); }); + const initializeCategoryVisibility = () => { const visibility: Record = {}; props.productsData.forEach(product => { @@ -99,7 +99,26 @@ const toggleAllCategories = () => { - + + + + + + + + + + Alle + + + + {{ category }} + + + + + + { - - Alle - {{ category }} - - + class="size-full object-cover dark:brightness-75" loading="lazy" />