Skip to content

Instantly share code, notes, and snippets.

@cristea2017
Last active May 7, 2024 08:53
Show Gist options
  • Save cristea2017/521b3a44ab567ab843a9e8a1dd48c85e to your computer and use it in GitHub Desktop.
Save cristea2017/521b3a44ab567ab843a9e8a1dd48c85e to your computer and use it in GitHub Desktop.
reactNative

post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET' end end end

AppRegistry.registerComponent(appName, () => App);

npx react-native init AgentApp --template react-native-template-typescript

npx react-native start --port 8082

npx react-native bump-version --type patch --skip-code-for ios

npx react-native init rnmcaddon --template https://github.com/Meliora-Apps/react-native-cocia-template.git

npx react-native run-ios --simulator="iPhone 15" npx react-native run-ios --simulator="iPhone SE (3rd generation)"

rm -rf node_modules/

 "android:ide": "open -a /Applications/Android\\ Studio.app ./android",
    "ios:ide": "open ios/*.xcworkspace/",

🟡 Use npx depcheck and uninstall unused libraries Informs about unused and missing dependencies from package.json https://www.npmjs.com/package/depcheck npx depcheck

simultor

https://medium.com/sahibinden-technology/become-an-ios-simulator-master-part-2-71081a5a9ee0

https://anu-thomas.medium.com/patch-package-in-react-native-c7786a15e279

import React, { memo, useMemo, useRef } from "react";
import { RefreshControl, ViewStyle } from "react-native";
import {
DataProvider,
LayoutProvider,
RecyclerListView,
} from "recyclerlistview"; // Version can be specified in package.json
import theme from "../theme";
import strings from "../translations";
import { RestaurantsType, RestaurantTypeItem } from "../types";
import { Column } from "../ui/Column";
import ListFooterLoading from "../ui/ListFooterLoading";
import ListHeaderTitle from "../ui/ListHeaderTitle";
import { Row } from "../ui/Row";
import ShowMore from "../ui/ShowMore";
import { VerticalSpacer } from "../ui/Spacer";
import DiscountsList from "./DiscountsList";
import HomeLandingsList from "./HomeLandingsList";
import HomeNearRestaurantsList from "./HomeNearRestaurantsList";
import HomeNewRestaurantsList from "./HomeNewRestaurantsList";
import HomeRecommendedRestaurantsList from "./HomeRecommendedRestaurantsList";
import HomeTopRestaurantList from "./HomeTopRestaurantList";
import PreferenceInlineList from "./PreferenceInlineList";
type ViewTypes =
| "HomeLandingsList"
| "PreferenceInlineList"
| "HomeNearRestaurantsList"
| "DiscountsList"
| "HomeRecommendedRestaurantsList"
| "HomeTopRestaurantsList"
| "HomeNewRestaurantsList"
| "default";
const dataProviderMaker = <ItemT,>(
data: ReadonlyArray<ItemT>,
sections: Array<{ type: ViewTypes }>
) => new DataProvider((r1, r2) => r1 !== r2).cloneWithRows([sections, ...data]);
const layoutMaker = () =>
new LayoutProvider(
(index) => {
let layoutType: ViewTypes = "default";
if (index === 0) {
layoutType = "HomeLandingsList";
} else if (index === 1) {
layoutType = "PreferenceInlineList";
} else if (index === 2) {
layoutType = "HomeNearRestaurantsList";
} else if (index === 3) {
layoutType = "DiscountsList";
} else if (index === 4) {
layoutType = "HomeRecommendedRestaurantsList";
} else if (index === 5) {
layoutType = "HomeTopRestaurantsList";
} else if (index === 6) {
layoutType = "HomeNewRestaurantsList";
}
return layoutType;
},
(type, dim) => {
switch (type as ViewTypes) {
case "HomeLandingsList":
dim.width = theme.windowWidth;
dim.height = 260;
break;
case "HomeNearRestaurantsList":
dim.width = theme.windowWidth;
dim.height = 350;
break;
case "PreferenceInlineList":
dim.width = theme.windowWidth;
dim.height = 160;
break;
case "DiscountsList":
dim.width = theme.windowWidth;
dim.height = 190;
break;
case "HomeRecommendedRestaurantsList":
dim.width = theme.windowWidth;
dim.height = 340;
break;
case "HomeTopRestaurantsList":
dim.width = theme.windowWidth;
dim.height = 220;
break;
case "HomeNewRestaurantsList":
dim.width = theme.windowWidth;
dim.height = 370;
break;
case "default":
dim.width = theme.windowWidth;
dim.height = 290;
break;
default:
dim.width = theme.windowWidth;
dim.height = 0;
}
}
);
// type RecycleListDataType = {
// type: ViewTypes;
// data?: RestaurantsType;
// };
// const PreparedData: RecycleListDataType[] & RestaurantsType = [
// {type: 'HomeLandingsList'},
// {type: 'PreferenceInlineList'},
// {type: 'HomeNearRestaurantsList'},
// {type: 'DiscountsList'},
// {type: 'HomeRecommendedRestaurantsList'},
// {type: 'HomeTopRestaurantsList'},
// {type: 'HomeNewRestaurantsList'},
// ];
type Props<ItemT> = {
restaurantData: ReadonlyArray<ItemT> | null | undefined;
refreshing: boolean;
listEndReached: boolean;
isLoadMore: boolean;
renderItem: (item: ItemT) => React.ReactNode;
onEndReached: () => void;
reloadRestaurants: () => void;
isMarkets?: boolean;
onPressShowMore: () => void;
numberOfSections: number;
};
const RecycleList2 = memo(<ItemT,>(props: Props<ItemT>) => {
const _layoutProvider = useRef(layoutMaker()).current;
const dataProvider = useMemo(() => {
// const p = [
// {type: 'HomeLandingsList'},
// {type: 'PreferenceInlineList'},
// {type: 'HomeNearRestaurantsList'},
// {type: 'DiscountsList'},
// {type: 'HomeRecommendedRestaurantsList'},
// {type: 'HomeTopRestaurantsList'},
// {type: 'HomeNewRestaurantsList'},
// ]
if (!props.restaurantData) return dataProviderMaker([], []);
return dataProviderMaker(props.restaurantData, [
{ type: "HomeLandingsList" },
{ type: "PreferenceInlineList" },
{ type: "HomeNearRestaurantsList" },
{ type: "DiscountsList" },
{ type: "HomeRecommendedRestaurantsList" },
{ type: "HomeTopRestaurantsList" },
{ type: "HomeNewRestaurantsList" },
]);
}, [props.restaurantData]);
const rowRenderer = (type: string | number, data: ItemT, index: number) => {
console.log(">type", type, index);
const children = [
<HomeLandingsList />,
<PreferenceInlineList />,
<>
<HomeNearRestaurantsList />
<VerticalSpacer variant="sm" />
</>,
<DiscountsList />,
];
if (index < 2)
return (
<Column style={{ width: theme.windowWidth }}>{children[index]}</Column>
);
if (index > 6) return <Column>{props.renderItem(data)}</Column>;
return null;
// switch (type as ViewTypes) {
// case 'HomeLandingsList':
// return (
// <Column>
// <HomeLandingsList />
// </Column>
// );
// case 'PreferenceInlineList':
// return (
// <Column style={{width: theme.windowWidth}}>
// <PreferenceInlineList />
// </Column>
// );
// case 'HomeNearRestaurantsList':
// return (
// <Column>
// <HomeNearRestaurantsList />
// <VerticalSpacer variant="sm" />
// </Column>
// );
// case 'DiscountsList':
// return (
// <Column>
// <DiscountsList />
// </Column>
// );
// case 'HomeRecommendedRestaurantsList':
// return (
// <Column>
// <HomeRecommendedRestaurantsList />
// </Column>
// );
// case 'HomeTopRestaurantsList':
// return (
// <Column>
// <HomeTopRestaurantList />
// </Column>
// );
// case 'HomeNewRestaurantsList':
// return (
// <Column>
// <HomeNewRestaurantsList />
// <VerticalSpacer variant="sm" />
// <Row align="center" justify="space-between">
// <ListHeaderTitle title={strings.restaurants} />
// <ShowMore itemsCount={'200+'} onPress={props.onPressShowMore} />
// </Row>
// </Column>
// );
// case 'default':
// return <Column>{props.renderItem(data)}</Column>;
// default:
// return null;
// }
};
const handleEndReached = () => {
if (!props.listEndReached) props.onEndReached();
};
const recycleStyles: ViewStyle = { minWidth: 1, minHeight: 1 };
return (
<Column flex={1} bgColor={theme.colorWhite}>
<RecyclerListView
style={recycleStyles}
layoutProvider={_layoutProvider}
dataProvider={dataProvider}
rowRenderer={rowRenderer}
canChangeSize
forceNonDeterministicRendering
renderAheadOffset={theme.windowHeight}
renderFooter={() => (props.isLoadMore ? <ListFooterLoading /> : null)}
onEndReachedThreshold={1}
onEndReachedThresholdRelative={1}
onEndReached={handleEndReached}
scrollViewProps={{
refreshControl: (
<RefreshControl
tintColor={theme.colorPurple}
refreshing={props.refreshing}
onRefresh={props.reloadRestaurants}
/>
),
}}
/>
</Column>
);
});
export default RecycleList2;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment