Untitled

 avatar
unknown
typescript
4 years ago
4.0 kB
6
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...