Reload specific set when edited
This commit is contained in:
parent
185ebd1824
commit
82234a30a8
83
SetList.tsx
83
SetList.tsx
|
@ -5,19 +5,10 @@ import {
|
||||||
useRoute,
|
useRoute,
|
||||||
} from "@react-navigation/native";
|
} from "@react-navigation/native";
|
||||||
import { useCallback, useEffect, useState } from "react";
|
import { useCallback, useEffect, useState } from "react";
|
||||||
import {
|
import { DeviceEventEmitter, FlatList } from "react-native";
|
||||||
DeviceEventEmitter,
|
|
||||||
EmitterSubscription,
|
|
||||||
FlatList,
|
|
||||||
} from "react-native";
|
|
||||||
import { List } from "react-native-paper";
|
import { List } from "react-native-paper";
|
||||||
import { Like } from "typeorm";
|
import { Like } from "typeorm";
|
||||||
import {
|
import { LIMIT } from "./constants";
|
||||||
GYM_SET_CREATED,
|
|
||||||
GYM_SET_DELETED,
|
|
||||||
GYM_SET_UPDATED,
|
|
||||||
LIMIT,
|
|
||||||
} from "./constants";
|
|
||||||
import { getNow, setRepo, settingsRepo } from "./db";
|
import { getNow, setRepo, settingsRepo } from "./db";
|
||||||
import DrawerHeader from "./DrawerHeader";
|
import DrawerHeader from "./DrawerHeader";
|
||||||
import GymSet, { defaultSet } from "./gym-set";
|
import GymSet, { defaultSet } from "./gym-set";
|
||||||
|
@ -38,57 +29,45 @@ export default function SetList() {
|
||||||
const { params } = useRoute<RouteProp<HomePageParams, "Sets">>();
|
const { params } = useRoute<RouteProp<HomePageParams, "Sets">>();
|
||||||
const [term, setTerm] = useState(params?.search || "");
|
const [term, setTerm] = useState(params?.search || "");
|
||||||
|
|
||||||
const refresh = async ({ value, take }: { value: string; take: number }) => {
|
const refresh = async (id: number) => {
|
||||||
|
const set = await setRepo.findOne({ where: { id } });
|
||||||
|
let newSets = sets.map((oldSet) => (oldSet.id === id ? set : oldSet));
|
||||||
|
setSets(newSets);
|
||||||
|
};
|
||||||
|
|
||||||
|
const reset = async ({ value, skip }: { value: string; skip: number }) => {
|
||||||
setRefreshing(true);
|
setRefreshing(true);
|
||||||
setOffset(0);
|
|
||||||
const newSets = await setRepo
|
const newSets = await setRepo
|
||||||
.find({
|
.find({
|
||||||
where: { name: Like(`%${value.trim()}%`), hidden: 0 as any },
|
where: { name: Like(`%${value.trim()}%`), hidden: 0 as any },
|
||||||
take,
|
take: LIMIT,
|
||||||
skip: 0,
|
skip,
|
||||||
order: { created: "DESC" },
|
order: { created: "DESC" },
|
||||||
})
|
})
|
||||||
.finally(() => setRefreshing(false));
|
.finally(() => setRefreshing(false));
|
||||||
console.log(`${SetList.name}.refresh:`, { value, take, offset });
|
console.log(`${SetList.name}.refresh:`, { value, offset });
|
||||||
setSets(newSets);
|
setSets(newSets);
|
||||||
setEnd(false);
|
setEnd(false);
|
||||||
};
|
};
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
settingsRepo.findOne({ where: {} }).then(setSettings);
|
settingsRepo.findOne({ where: {} }).then(setSettings);
|
||||||
refresh({
|
reset({
|
||||||
take: LIMIT,
|
|
||||||
value: "",
|
value: "",
|
||||||
|
skip: 0,
|
||||||
});
|
});
|
||||||
|
const description = DeviceEventEmitter.addListener(SETTINGS, () => {
|
||||||
const subs: EmitterSubscription[] = [];
|
settingsRepo.findOne({ where: {} }).then(setSettings);
|
||||||
|
});
|
||||||
subs.push(
|
return description.remove;
|
||||||
DeviceEventEmitter.addListener(SETTINGS, () => {
|
|
||||||
settingsRepo.findOne({ where: {} }).then(setSettings);
|
|
||||||
}),
|
|
||||||
DeviceEventEmitter.addListener(GYM_SET_UPDATED, () =>
|
|
||||||
refresh({ take: offset, value: term })
|
|
||||||
),
|
|
||||||
DeviceEventEmitter.addListener(GYM_SET_DELETED, () => {
|
|
||||||
refresh({ take: LIMIT, value: term });
|
|
||||||
}),
|
|
||||||
DeviceEventEmitter.addListener(GYM_SET_CREATED, () => {
|
|
||||||
refresh({ take: LIMIT, value: term });
|
|
||||||
}),
|
|
||||||
DeviceEventEmitter.addListener(SETTINGS, () =>
|
|
||||||
settingsRepo.findOne({ where: {} }).then(setSettings)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
return () => subs.forEach((sub) => sub.remove());
|
|
||||||
/* eslint-disable react-hooks/exhaustive-deps */
|
/* eslint-disable react-hooks/exhaustive-deps */
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
const search = (value: string) => {
|
const search = (value: string) => {
|
||||||
setTerm(value);
|
setTerm(value);
|
||||||
refresh({
|
setOffset(0);
|
||||||
take: LIMIT,
|
reset({
|
||||||
|
skip: 0,
|
||||||
value,
|
value,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -97,14 +76,10 @@ export default function SetList() {
|
||||||
if (!params) return;
|
if (!params) return;
|
||||||
console.log({ params });
|
console.log({ params });
|
||||||
if (params.search) search(params.search);
|
if (params.search) search(params.search);
|
||||||
else if (params.refresh)
|
else if (params.refresh) refresh(params.refresh);
|
||||||
refresh({
|
|
||||||
take: offset,
|
|
||||||
value: term,
|
|
||||||
});
|
|
||||||
else if (params.reset)
|
else if (params.reset)
|
||||||
refresh({
|
reset({
|
||||||
take: LIMIT,
|
skip: 0,
|
||||||
value: term,
|
value: term,
|
||||||
});
|
});
|
||||||
/* eslint-disable react-hooks/exhaustive-deps */
|
/* eslint-disable react-hooks/exhaustive-deps */
|
||||||
|
@ -179,9 +154,8 @@ export default function SetList() {
|
||||||
const remove = async () => {
|
const remove = async () => {
|
||||||
setIds([]);
|
setIds([]);
|
||||||
await setRepo.delete(ids.length > 0 ? ids : {});
|
await setRepo.delete(ids.length > 0 ? ids : {});
|
||||||
DeviceEventEmitter.emit(GYM_SET_DELETED);
|
return reset({
|
||||||
return refresh({
|
skip: 0,
|
||||||
take: LIMIT,
|
|
||||||
value: term,
|
value: term,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
@ -209,8 +183,9 @@ export default function SetList() {
|
||||||
onEndReached={next}
|
onEndReached={next}
|
||||||
refreshing={refreshing}
|
refreshing={refreshing}
|
||||||
onRefresh={() => {
|
onRefresh={() => {
|
||||||
refresh({
|
setOffset(0);
|
||||||
take: LIMIT,
|
reset({
|
||||||
|
skip: 0,
|
||||||
value: term,
|
value: term,
|
||||||
});
|
});
|
||||||
}}
|
}}
|
||||||
|
|
|
@ -3,6 +3,16 @@ import GymSet from "./gym-set";
|
||||||
export type HomePageParams = {
|
export type HomePageParams = {
|
||||||
Sets: {
|
Sets: {
|
||||||
search?: string;
|
search?: string;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reload the specified set by ID.
|
||||||
|
*/
|
||||||
|
refresh?: number;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reload the list with limit = 0
|
||||||
|
*/
|
||||||
|
reset?: number;
|
||||||
};
|
};
|
||||||
EditSet: {
|
EditSet: {
|
||||||
set: GymSet;
|
set: GymSet;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user