@fto-consult/expo-ui
Version:
Bibliothèque de composants UI Expo,react-native
83 lines (76 loc) • 2.74 kB
JavaScript
import { RecyclerListView, DataProvider, LayoutProvider } from "recyclerlistview";
//import PropTypes from "prop-types";
import CommonListComponent from "./Common";
import {defaultObj,defaultDecimal} from "$cutils";
import React from "$react";
import Label from "$ecomponents/Label";
import {ActivityIndicator} from "react-native-paper";
import PropTypes from "prop-types";
export const ViewTypes = {
FULL: 0,
HALF_LEFT: 1,
HALF_RIGHT: 2
};
const ListComponent = React.forwardRef((props,ref)=>{
let {getItemLayout,items,itemHeight,renderItem,rowRenderer,...rest} = props;
rest = defaultObj(rest);
const listRef = React.useRef(null);
const [state,setState] = React.useState({
dataProvider : new DataProvider((r1, r2) => {
return r1 !== r2;
}),
layoutProvider : new LayoutProvider(
index => {
if (index % 3 === 0) {
return ViewTypes.FULL;
} else if (index % 3 === 1) {
return ViewTypes.HALF_LEFT;
} else {
return ViewTypes.HALF_RIGHT;
}
},
(type, dim) => {
if(typeof itemHeight =='number' && itemHeight) {
dim.height = itemHeight;
}
}
),
});
React.useEffect(()=>{
setState({
...state,
dataProvider : dataProvider.cloneWithRows(items)
});
console.log(dataProvider," is d provider hein",items)
},[items])
const {dataProvider,layoutProvider} = state;
return <>
<CommonListComponent
{...rest}
items = {items}
ref = {(el)=>{
if(el){
}
React.setRef(listRef,el);
React.setRef(ref,el);
}}
layoutProvider={layoutProvider}
dataProvider={dataProvider}
rowRenderer = {function(type,data,index){
let ret = renderItem({item:data,type,index,isScrolling:listRef?.isScrolling?true:false,items:defaultArray(items)});
console.log(ret," is result for ",data,index)
return (React.isValidElement(ret,true)) ? <Label children={ret}/> : null;
}}
Component = {RecyclerListView}
/>
</>
})
ListComponent.prototypes = {
...defaultObj(RecyclerListView.propTypes),
renderItem : PropTypes.func.isRequired,
}
export default ListComponent;
ListComponent.propTypes = {
...CommonListComponent.propTypes
}
ListComponent.displayName = "RecyclerListViewComponent";