57 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { useForm } from "@mantine/form";
 | 
						|
import { useEffect, useState } from "react";
 | 
						|
import { BaseMarketplaceSchema } from "../../../../../client";
 | 
						|
import { useCardSummariesFull } from "../../../hooks/useCardSummaries.tsx";
 | 
						|
import isModuleInProject from "../../../../../modules/utils/isModuleInProject.ts";
 | 
						|
import { ModuleNames } from "../../../../../modules/modules.tsx";
 | 
						|
 | 
						|
type State = {
 | 
						|
    idOrName: string | null;
 | 
						|
    marketplace: BaseMarketplaceSchema | null;
 | 
						|
};
 | 
						|
 | 
						|
const usePrefillCard = () => {
 | 
						|
    const { objects } = useCardSummariesFull();
 | 
						|
    const form = useForm<State>({
 | 
						|
        initialValues: {
 | 
						|
            idOrName: null,
 | 
						|
            marketplace: null,
 | 
						|
        },
 | 
						|
    });
 | 
						|
    const [data, setData] = useState(objects);
 | 
						|
 | 
						|
    const applyFilters = () => {
 | 
						|
        let result = objects;
 | 
						|
 | 
						|
        result = result.filter(obj => isModuleInProject(ModuleNames.SERVICES_AND_PRODUCTS, obj.board.project));
 | 
						|
 | 
						|
        if (form.values.idOrName) {
 | 
						|
            if (isNaN(parseInt(form.values.idOrName))) {
 | 
						|
                const name: string = form.values.idOrName.toLowerCase();
 | 
						|
                result = result.filter(
 | 
						|
                    obj => obj.name.toLowerCase().search(name) !== -1,
 | 
						|
                );
 | 
						|
            } else {
 | 
						|
                const id = parseInt(form.values.idOrName);
 | 
						|
                result = result.filter(
 | 
						|
                    obj => obj.id === id,
 | 
						|
                );
 | 
						|
            }
 | 
						|
        }
 | 
						|
        if (form.values.marketplace) {
 | 
						|
            result = result.filter(
 | 
						|
                obj => obj.baseMarketplace?.key === form.values.marketplace?.key,
 | 
						|
            );
 | 
						|
        }
 | 
						|
        setData(result);
 | 
						|
    };
 | 
						|
 | 
						|
    useEffect(() => {
 | 
						|
        applyFilters();
 | 
						|
    }, [form.values, objects]);
 | 
						|
 | 
						|
    return { data, form };
 | 
						|
};
 | 
						|
 | 
						|
export default usePrefillCard;
 |