Untitled
unknown
typescript
4 years ago
4.0 kB
10
Indexable
const createhmHM = async (firstHm: any) => {
const homeChurchInfo = {
id: firstHm.id, // PK
};
try {
const addHM = (await API.graphql({
query: mutations.createHomeChurchInfo,
variables: { input: homeChurchInfo },
authMode: GRAPHQL_AUTH_MODE.AMAZON_COGNITO_USER_POOLS,
})) as GraphQLResult<ListHomeChurchInfosQuery>;
console.log({ added: { addHM } });
} catch (err) {
console.log({ create: err });
}
};
const shouldCreateHomeChurchInfo = async (
f1HomeChurches: any,
homeChurchInfos: any
) => {
console.log({ f1HomeChurches });
console.log({ homeChurchInfos });
const createQueue: any = [];
f1HomeChurches.forEach((f1HomeChurch: any) => {
const inHomeChurchInfosTable = homeChurchInfos.find(
(homeChurchInfo: any) => {
if (homeChurchInfo?.id === f1HomeChurch?.id)
return homeChurchInfo?.id === f1HomeChurch?.id;
}
);
if (!inHomeChurchInfosTable) {
createQueue.push(createhmHM(f1HomeChurch));
} else console.log('Already exists');
});
await Promise.all(createQueue);
if (createQueue.length) return true;
return false;
};
const updateHomeChurchInfo = async (fieldsToUpdate: any): Promise<void> => {
try {
const updateHMInfo = (await API.graphql({
query: mutations.updateHomeChurchInfo,
variables: { input: fieldsToUpdate },
authMode: GRAPHQL_AUTH_MODE.AMAZON_COGNITO_USER_POOLS,
})) as GraphQLResult<ListHomeChurchInfosQuery>;
console.log({ updated: { updateHMInfo } });
} catch (err) {
console.log({ update: err });
}
};
const injectF1Data = (f1HomeChurches: any, homeChurchInfos: any) => {
return homeChurchInfos.map((homeChurchInfo: any) => {
const inF1Table = f1HomeChurches.find(
(f1HomeChurch: any) => f1HomeChurch?.id === homeChurchInfo?.id
);
homeChurchInfo.F1ItemData = inF1Table;
return homeChurchInfo;
});
};
useEffect(() => {
const fetchHomeChurchInfoChurches = async (): Promise<any> => {
const data: Array<any> = [];
const fetchNext = async (next: string | null = null) => {
try {
const json = (await API.graphql({
query: queries.listHomeChurchInfos,
variables: { nextToken: next },
authMode: GRAPHQL_AUTH_MODE.API_KEY,
})) as GraphQLResult<ListHomeChurchInfosQuery>;
console.log({
'Success queries.listHomeChurchInfos': json,
});
if (json?.data?.listHomeChurchInfos?.items?.length) {
json?.data?.listHomeChurchInfos?.items?.forEach((hmInfo) => {
data.push(hmInfo);
});
}
if (json?.data?.listHomeChurchInfos?.nextToken)
await fetchNext(json?.data?.listHomeChurchInfos?.nextToken);
} catch (e) {
console.error(e);
}
};
await fetchNext(null);
return data;
};
const fetchF1ListGroup2sChurches = async (): Promise<Array<any>> => {
let data: Array<any> = [];
await DataLoader.listHomeChurches(
(items) => {
data = [...data, ...items];
},
() => null
);
return data;
};
const load = async () => {
const f1HomeChurchItems = await fetchF1ListGroup2sChurches();
const homeChurchInfoItems = await fetchHomeChurchInfoChurches();
if (
await shouldCreateHomeChurchInfo(f1HomeChurchItems, homeChurchInfoItems)
) {
console.log(
'At least one new HomeChurchInfo has been added. Fetch again'
);
load();
}
const injectedHomeChurchInfoData = injectF1Data(
f1HomeChurchItems,
homeChurchInfoItems
);
setHomeChurch(injectedHomeChurchInfoData);
setIsLoading(false);
};
load();
}, []);Editor is loading...