feat: deal product services

This commit is contained in:
2024-05-19 03:30:04 +03:00
parent b0cfaf3a8b
commit c5cd8e350f
28 changed files with 332 additions and 151 deletions

View File

@@ -1,7 +1,7 @@
import {Select, SelectProps} from "@mantine/core";
import {useEffect, useMemo, useState} from "react";
import {ObjectWithNameAndId} from "../../types/utils.ts";
import {groupBy} from "lodash";
import {groupBy, omit} from "lodash";
export type SelectObjectType<T extends ObjectWithNameAndId> = T;
@@ -16,6 +16,7 @@ type RestProps<T extends ObjectWithNameAndId> = {
onChange: (value: SelectObjectType<T>) => void;
data: SelectObjectType<T>[];
groupBy?: (item: SelectObjectType<T>) => string;
filterBy?: (item: SelectObjectType<T>) => boolean;
}
export type ObjectSelectProps<T extends ObjectWithNameAndId> =
@@ -30,8 +31,10 @@ const ObjectSelect = <T extends ObjectWithNameAndId, >(props: ObjectSelectProps<
const value = isControlled ? props.value : internalValue;
const data = useMemo(() => {
const propsData = props.filterBy ? props.data.filter(props.filterBy) : props.data;
if (props.groupBy) {
const groupedData = groupBy(props.data, props.groupBy);
const groupedData = groupBy(propsData, props.groupBy);
return Object.entries(groupedData).map(([group, items]) => ({
group,
items: items.map(item => ({
@@ -40,7 +43,7 @@ const ObjectSelect = <T extends ObjectWithNameAndId, >(props: ObjectSelectProps<
}))
}));
} else {
return props.data.map(item => ({
return propsData.map(item => ({
label: item.name,
value: item.id.toString()
}));
@@ -62,10 +65,10 @@ const ObjectSelect = <T extends ObjectWithNameAndId, >(props: ObjectSelectProps<
if (isControlled || !internalValue) return;
props.onChange(internalValue);
}, [internalValue]);
const restProps = omit(props, ['filterBy', 'groupBy']);
return (
<Select
{...props}
{...restProps}
value={value?.id.toString()}
onChange={handleOnChange}
data={data}