Skip to content

Instantly share code, notes, and snippets.

View Stringsaeed's full-sized avatar
🏗️
building something that matters

Saeed Stringsaeed

🏗️
building something that matters
View GitHub Profile
@intergalacticspacehighway
intergalacticspacehighway / viewability-tracker-flatlist.tsx
Last active July 24, 2025 06:38
Viewability tracker with shared values
import { createContext, forwardRef, useCallback, useMemo } from "react";
import { FlatList, FlatListProps, ViewToken } from "react-native";
import Animated, { useSharedValue } from "react-native-reanimated";
const MAX_VIEWABLE_ITEMS = 4;
type ViewabilityItemsContextType = string[];
export const ViewabilityItemsContext = createContext<
Animated.SharedValue<ViewabilityItemsContextType>
@intergalacticspacehighway
intergalacticspacehighway / use-fetch-on-app-foreground.tsx
Created January 28, 2022 04:10
app fetch request failing in background
import { useEffect, useRef } from "react";
import { AppState, AppStateStatus } from "react-native";
export const useFetchOnAppForeground = () => {
const listener = useRef(null);
function fetchOnAppForeground(params) {
if (AppState.currentState === "active") {
return fetch(params);
} else {
@terrysahaidak
terrysahaidak / Gallery.tsx
Created April 25, 2023 05:09
Control scroll
@derekstavis
derekstavis / Toast.tsx
Last active May 16, 2024 14:13
React Native Toast, without Context hell
/* Layout and Text components are my own utility components. Replace them by your own. */
import { memo, useEffect, useMemo, useState } from "react";
import { ViewStyle } from "react-native";
import { A } from "@mobily/ts-belt";
import mitt from "mitt";
import { v4 as uuid } from "@lukeed/uuid";
import Animated, {
Layout as REALayout,
Easing,
@jpudysz
jpudysz / live-activity-intents.js
Created February 1, 2024 17:48
Add target to any file in Xcode with Expo config plugin
const { withXcodeProject } = require('@expo/config-plugins')
const findFileReferenceByName = (xcodeProject, fileName) => {
const fileReferences = xcodeProject.hash.project.objects['PBXFileReference']
return Object.fromEntries(
Object
.entries(fileReferences)
.filter(([key, value]) => value.name === `"${fileName}"`)
)
import ExpoModulesCore
import SwiftUI
class DraggableProps: ExpoSwiftUI.ViewProps {
@Field var text: String
}
struct DraggableView: ExpoSwiftUI.View {
@EnvironmentObject var props: DraggableProps
var body: some View {