import AuthenticatedLayout from '@/Layouts/AuthenticatedLayout'; import TextInput from '@/Components/TextInput'; import { Head, useForm } from '@inertiajs/react'; import { FormEventHandler, SetStateAction, useState } from 'react'; import axios from 'axios'; import Customer from './Customer'; interface CustomerProps { customers: [{ id: number name: string customer_group_id: string, is_in_group: boolean }], }; type Customer = { id: number name: string customer_group_id: string, is_in_group: boolean }; interface CustomerGroupProps { groups: [{ name: string, id: number, customers: [{ id: number name: string customer_group_id: string, is_in_group: boolean }], }] }; type CustomerGroup = { name: string, id: number, customers: [{ id: number name: string customer_group_id: string, is_in_group: boolean }], }; type FormInputs = { id: number | null; customers: Customer[], group_name: string, }; interface CurrentGroup { id?: number | null ; name?: string; } export default function CustomerGroups({groups, customers} :( CustomerGroupProps & CustomerProps) ) { const [addCustomerToGroupModal, setAddCustomerToGroupModal] = useState(false); const [currentGroup, setCurrentGroup] = useState({id: null, name: ""}); const [searchItemGroup, setSearchItemGroup] = useState(''); const [searchItemCustomers, setSearchItemCustomers] = useState('') const [searchItemCustomersAddToGroup, setSearchItemCustomersAddToGroup] = useState('') const [uniqueGroupNameError, setUniqueGroupNameError,] = useState(false) const [activeTabLetter, setActiveTabLetter] = useState('') const [activeTab, setActiveTab] = useState('groups') const [filteredCustomers, setFilteredCustomers] = useState(customers) const [filteredCustomersAddToGroup, setFilteredCustomersAddToGroup] = useState(customers) const [filteredGroups, setFilteredGroups] = useState(groups) const [checkboxes, setCheckboxes] = useState([]); const [checkboxesAddToGroup, setCheckboxesAddToGroup] = useState([]); const letterArray = ["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","Å","Ä","Ö"]; const { data, setData, post, processing, errors, reset } = useForm({ id: null, group_name: "", customers: [] }); //Group const handleInputChangeCreateGroup = (e: any) => { const searchTerm = e.target.value; setSearchItemCustomers(searchTerm) const filteredItems = customers.filter((customer) => customer.name.toLowerCase().includes(searchTerm.toLowerCase()) ); setFilteredCustomers(filteredItems); } const submitGroup: FormEventHandler = (e : any) => { e.preventDefault() let submit = true; groups.map( group => { if (data.group_name.toLowerCase() === group.name.toLowerCase()) { setUniqueGroupNameError(true); submit = false; } }) if (submit) { post(route('register_customer_group'), { onFinish: () => [setData( 'group_name', '', ), setCheckboxes([]), window.location.href = "/customer-groups"], }); } } const handleInputChangeGroup = (e: any) => { const searchTerm = e.target.value; setSearchItemGroup(searchTerm) const filteredItems = groups.filter((customer) => customer.name.toLowerCase().includes(searchTerm.toLowerCase()) ); setFilteredGroups(filteredItems); } const handleInputClick = (searchTerm: string) => { const filteredItems = groups.filter((customer) => customer.name.toLowerCase().startsWith(searchTerm.toLowerCase()) ); setFilteredGroups(filteredItems); } const handleCheckBoxChange = (e: any) => { let index = e.target.dataset.id; let prev = checkboxes; let itemIndex = prev.indexOf(index); if (itemIndex !== -1) { prev.splice(itemIndex, 1); } else { prev.push(index); } setCheckboxes([...prev]); setData('customers', checkboxes) } const deleteCustomerGroup = (id: string | number | undefined) => { axios.delete('/api/customer-group/' + id) .then(response => { window.location.href = "/customer-groups"; }) .catch(error => {console.log(error)}) } // Add to group const handleInputChangeAddToGroup = (e: any) => { const searchTerm = e.target.value; setSearchItemCustomersAddToGroup(searchTerm) const filteredItems = customers.filter((customer) => customer.name.toLowerCase().includes(searchTerm.toLowerCase()) ); setFilteredCustomersAddToGroup(filteredItems); } const addToGroup = (id: number | null | undefined) => { axios.post('/api/add-to-customer-group/' + id, {customers: data.customers}) .then(response => { window.location.href = "/customer-groups"; }) .catch(error => {console.log(error)}) } const handleCheckBoxChangeAddToGroup = (e: any) => { let index = e.target.dataset.id; let prev = checkboxesAddToGroup; let itemIndex = prev.indexOf(index); if (itemIndex !== -1) { prev.splice(itemIndex, 1); } else { prev.push(index); } setCheckboxesAddToGroup([...prev]); setData('customers', checkboxesAddToGroup) } const deleteCustomerFromGroup = (id: string | number) => { axios.put('/api/customer/' + id) .then(response => { window.location.href = "/customer-groups"; }) .catch(error => {console.log(error)}) } return ( { addCustomerToGroupModal &&

Lägg till deltagare i grupp {currentGroup.name}

{filteredCustomersAddToGroup && filteredCustomersAddToGroup .map( customer => { return })}
Valda deltagare/funktionärer: {filteredCustomersAddToGroup && filteredCustomersAddToGroup .filter((filteredCustomer) => checkboxesAddToGroup.includes("" + filteredCustomer.id)) .map( customer => { return

{customer.name}

})}
}
Tillbaka {activeTab === "create-group" && <>

Skapa grupp

Namn på grupp:

setData('group_name', e.target.value)} /> {uniqueGroupNameError &&

Gruppnamn är inte unikt

}

Välj vilka som ska ingå i gruppen:

{filteredCustomers && filteredCustomers .map( customer => { return })}
Valda deltagare/funktionärer: {filteredCustomers && filteredCustomers .filter((filteredCustomer) => checkboxes.includes("" + filteredCustomer.id)) .map( customer => { return

{customer.name}

})}
} { activeTab === "groups" && <>

Grupper

    { letterArray && letterArray.map( letter => { return
  • [setActiveTabLetter(letter) ,handleInputClick(letter)]}> {letter}
  • }) }
  • [setActiveTabLetter(""), setFilteredGroups(groups), setSearchItemGroup("") ]}> Rensa
{filteredGroups && filteredGroups.map( group => { return
{group.name}
{ group.customers.length < 2 && }
    { group.customers.length > 0 && group.customers.filter((customer) => customer.is_in_group).map( customer => { return

    {customer.name}

    })}
})}
}
); }