|
@@ -1,7 +1,6 @@
|
|
|
import {
|
|
import {
|
|
|
useImperativeHandle,
|
|
useImperativeHandle,
|
|
|
forwardRef,
|
|
forwardRef,
|
|
|
- useReducer,
|
|
|
|
|
useEffect,
|
|
useEffect,
|
|
|
useState,
|
|
useState,
|
|
|
type Ref,
|
|
type Ref,
|
|
@@ -114,8 +113,10 @@ function SelectBox<T>({
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
const {
|
|
const {
|
|
|
|
|
+ bottomSheetHeaderContainer: bottomSheetHeaderContainerDynamicStyle,
|
|
|
contentContainer: contentContainerDynamicStyle,
|
|
contentContainer: contentContainerDynamicStyle,
|
|
|
titleContainer: titleContainerDynamicStyle,
|
|
titleContainer: titleContainerDynamicStyle,
|
|
|
|
|
+ itemContainer: itemContainerDynamicStyle,
|
|
|
hintTextIcon: hintTextIconDynamicStyle,
|
|
hintTextIcon: hintTextIconDynamicStyle,
|
|
|
contentText: contentTextDynamicStyle,
|
|
contentText: contentTextDynamicStyle,
|
|
|
cleanButton: cleanButtonDynamicStyle,
|
|
cleanButton: cleanButtonDynamicStyle,
|
|
@@ -134,7 +135,6 @@ function SelectBox<T>({
|
|
|
inlineSpaces,
|
|
inlineSpaces,
|
|
|
currentType,
|
|
currentType,
|
|
|
isDisabled,
|
|
isDisabled,
|
|
|
- typography,
|
|
|
|
|
radiuses,
|
|
radiuses,
|
|
|
borders,
|
|
borders,
|
|
|
spaces,
|
|
spaces,
|
|
@@ -148,28 +148,37 @@ function SelectBox<T>({
|
|
|
const [
|
|
const [
|
|
|
data,
|
|
data,
|
|
|
setData
|
|
setData
|
|
|
- ] = useReducer<Array<T & SelectedItem>, [Array<T & SelectedItem>]>((_, newState) => {
|
|
|
|
|
- return newState;
|
|
|
|
|
- }, initialData.map((bIItem, bIIndex) => {
|
|
|
|
|
- return {
|
|
|
|
|
- ...bIItem,
|
|
|
|
|
- __title: titleExtractor(bIItem, bIIndex),
|
|
|
|
|
- __key: keyExtractor(bIItem, bIIndex),
|
|
|
|
|
- __originalIndex: bIIndex
|
|
|
|
|
- };
|
|
|
|
|
- }));
|
|
|
|
|
|
|
+ ] = useState<Array<T & SelectedItem | SelectedItem>>([]);
|
|
|
|
|
+
|
|
|
|
|
+ const [
|
|
|
|
|
+ searchedData,
|
|
|
|
|
+ setSearchedData
|
|
|
|
|
+ ] = useState<Array<T & SelectedItem | SelectedItem>>([]);
|
|
|
|
|
|
|
|
const [
|
|
const [
|
|
|
isActive,
|
|
isActive,
|
|
|
setIsActive
|
|
setIsActive
|
|
|
] = useState(false);
|
|
] = useState(false);
|
|
|
|
|
|
|
|
|
|
+ const [
|
|
|
|
|
+ searchText,
|
|
|
|
|
+ setSearchText
|
|
|
|
|
+ ] = useState("");
|
|
|
|
|
+
|
|
|
|
|
+ const [
|
|
|
|
|
+ isLoading,
|
|
|
|
|
+ setIsLoading
|
|
|
|
|
+ ] = useState(false);
|
|
|
|
|
+
|
|
|
|
|
+ const [
|
|
|
|
|
+ isMoreLoading,
|
|
|
|
|
+ setIsMoreLoading
|
|
|
|
|
+ ] = useState(false);
|
|
|
|
|
+
|
|
|
const [
|
|
const [
|
|
|
selectedItems,
|
|
selectedItems,
|
|
|
setSelectedItems
|
|
setSelectedItems
|
|
|
- ] = useReducer<Array<SelectedItem>, [Array<SelectedItem>]>((_, newState) => {
|
|
|
|
|
- return newState;
|
|
|
|
|
- }, initialSelectedItems ?? []);
|
|
|
|
|
|
|
+ ] = useState<Array<SelectedItem>>(initialSelectedItems ?? []);
|
|
|
|
|
|
|
|
useImperativeHandle(
|
|
useImperativeHandle(
|
|
|
ref,
|
|
ref,
|
|
@@ -191,6 +200,18 @@ function SelectBox<T>({
|
|
|
}
|
|
}
|
|
|
}, [isActive]);
|
|
}, [isActive]);
|
|
|
|
|
|
|
|
|
|
+ useEffect(() => {
|
|
|
|
|
+ if(searchText && searchText.length) {
|
|
|
|
|
+
|
|
|
|
|
+ }
|
|
|
|
|
+ }, [searchText]);
|
|
|
|
|
+
|
|
|
|
|
+ useEffect(() => {
|
|
|
|
|
+ const initData = prepareDatas(initialData, initialSelectedItems);
|
|
|
|
|
+
|
|
|
|
|
+ setData(initData);
|
|
|
|
|
+ }, []);
|
|
|
|
|
+
|
|
|
const titleProps: ITextProps = {
|
|
const titleProps: ITextProps = {
|
|
|
color: currentType.titleColor,
|
|
color: currentType.titleColor,
|
|
|
variant: "bodyLargeSize"
|
|
variant: "bodyLargeSize"
|
|
@@ -226,8 +247,7 @@ function SelectBox<T>({
|
|
|
return {
|
|
return {
|
|
|
...bIItem,
|
|
...bIItem,
|
|
|
__title: titleExtractor(bIItem, bIIndex),
|
|
__title: titleExtractor(bIItem, bIIndex),
|
|
|
- __key: keyExtractor(bIItem, bIIndex),
|
|
|
|
|
- __originalIndex: bIIndex
|
|
|
|
|
|
|
+ __key: keyExtractor(bIItem, bIIndex)
|
|
|
};
|
|
};
|
|
|
});
|
|
});
|
|
|
|
|
|
|
@@ -238,7 +258,6 @@ function SelectBox<T>({
|
|
|
|
|
|
|
|
return {
|
|
return {
|
|
|
...sItem,
|
|
...sItem,
|
|
|
- __originalIndex: _newData[originalDataIndex]?.__originalIndex,
|
|
|
|
|
__title: _newData[originalDataIndex]?.__title,
|
|
__title: _newData[originalDataIndex]?.__title,
|
|
|
__key: _newData[originalDataIndex]?.__key
|
|
__key: _newData[originalDataIndex]?.__key
|
|
|
};
|
|
};
|
|
@@ -253,7 +272,6 @@ function SelectBox<T>({
|
|
|
|
|
|
|
|
return {
|
|
return {
|
|
|
...sItem,
|
|
...sItem,
|
|
|
- __originalIndex: data[originalDataIndex]?.__originalIndex,
|
|
|
|
|
__title: data[originalDataIndex]?.__title,
|
|
__title: data[originalDataIndex]?.__title,
|
|
|
__key: data[originalDataIndex]?.__key
|
|
__key: data[originalDataIndex]?.__key
|
|
|
};
|
|
};
|
|
@@ -262,6 +280,49 @@ function SelectBox<T>({
|
|
|
setSelectedItems(_newSelectedItems);
|
|
setSelectedItems(_newSelectedItems);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
|
|
+ const prepareDatas = (items: Array<T>, sItems?: Array<SelectedItem>) => {
|
|
|
|
|
+ const initData: Array<SelectedItem | T & SelectedItem> = [];
|
|
|
|
|
+
|
|
|
|
|
+ if(sItems && sItems.length) {
|
|
|
|
|
+ sItems.forEach((iS) => {
|
|
|
|
|
+ const dataIndex = items.findIndex((iD, iDI) => keyExtractor(iD, iDI) === iS.__key);
|
|
|
|
|
+
|
|
|
|
|
+ if(dataIndex === -1) {
|
|
|
|
|
+ initData.unshift(iS);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const finalData = items.map((bIItem, bIIndex) => {
|
|
|
|
|
+ return {
|
|
|
|
|
+ ...bIItem,
|
|
|
|
|
+ __title: titleExtractor(bIItem, bIIndex),
|
|
|
|
|
+ __key: keyExtractor(bIItem, bIIndex)
|
|
|
|
|
+ };
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ return [
|
|
|
|
|
+ ...initData,
|
|
|
|
|
+ ...finalData
|
|
|
|
|
+ ];
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ const selectObject = (selectedItem: T & SelectedItem | SelectedItem) => {
|
|
|
|
|
+ const isAlreadySelected = selectedItems.findIndex(sItem => sItem.__key === selectedItem.__key);
|
|
|
|
|
+ let _selectedItems = JSON.parse(JSON.stringify(selectedItems));
|
|
|
|
|
+
|
|
|
|
|
+ if(isAlreadySelected !== -1) {
|
|
|
|
|
+ _selectedItems = _selectedItems.filter((sItem: SelectedItem) => sItem.__key !== selectedItem.__key);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ _selectedItems.push({
|
|
|
|
|
+ __title: selectedItem.__title,
|
|
|
|
|
+ __key: selectedItem.__key
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ setSelectedItems(_selectedItems);
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
const onFocus = () => {
|
|
const onFocus = () => {
|
|
|
if(onFocusProp) onFocusProp();
|
|
if(onFocusProp) onFocusProp();
|
|
|
};
|
|
};
|
|
@@ -512,12 +573,27 @@ function SelectBox<T>({
|
|
|
|
|
|
|
|
const renderBottomSheetContent = () => {
|
|
const renderBottomSheetContent = () => {
|
|
|
return data.map((item: T, index: number) => {
|
|
return data.map((item: T, index: number) => {
|
|
|
- return <TouchableOpacity>
|
|
|
|
|
- {renderOptionIcon ? renderOptionIcon({
|
|
|
|
|
- item,
|
|
|
|
|
- index
|
|
|
|
|
- }) : null}
|
|
|
|
|
- <Text></Text>
|
|
|
|
|
|
|
+ return <TouchableOpacity
|
|
|
|
|
+ key={keyExtractor(item, index)}
|
|
|
|
|
+ style={[
|
|
|
|
|
+ stylesheet.itemContainer,
|
|
|
|
|
+ itemContainerDynamicStyle
|
|
|
|
|
+ ]}
|
|
|
|
|
+ onPress={() => {
|
|
|
|
|
+ selectObject();
|
|
|
|
|
+ }}
|
|
|
|
|
+ >
|
|
|
|
|
+ <View
|
|
|
|
|
+ style={[
|
|
|
|
|
+ stylesheet.itemContentContainer
|
|
|
|
|
+ ]}
|
|
|
|
|
+ >
|
|
|
|
|
+ {renderOptionIcon ? renderOptionIcon({
|
|
|
|
|
+ item,
|
|
|
|
|
+ index
|
|
|
|
|
+ }) : null}
|
|
|
|
|
+ <Text>Geldi gül mevsimi</Text>
|
|
|
|
|
+ </View>
|
|
|
<View>
|
|
<View>
|
|
|
<CheckIcon/>
|
|
<CheckIcon/>
|
|
|
</View>
|
|
</View>
|
|
@@ -533,8 +609,15 @@ function SelectBox<T>({
|
|
|
setIsActive(false);
|
|
setIsActive(false);
|
|
|
}}
|
|
}}
|
|
|
renderHeader={() => {
|
|
renderHeader={() => {
|
|
|
- return <View>
|
|
|
|
|
- <Text>
|
|
|
|
|
|
|
+ return <View
|
|
|
|
|
+ style={[
|
|
|
|
|
+ stylesheet.bottomSheetHeaderContainer,
|
|
|
|
|
+ bottomSheetHeaderContainerDynamicStyle
|
|
|
|
|
+ ]}
|
|
|
|
|
+ >
|
|
|
|
|
+ <Text
|
|
|
|
|
+ variant="titleMediumSize"
|
|
|
|
|
+ >
|
|
|
{title}
|
|
{title}
|
|
|
</Text>
|
|
</Text>
|
|
|
</View>;
|
|
</View>;
|