Skip to content
Snippets Groups Projects
notifications.ts 1.73 KiB
Newer Older
  • Learn to ignore specific revisions
  • import {useMemo} from 'react';
    import {AgentNotification} from "src/utils/agentUtils";
    
    import {Results, useQuery} from "@realm/react";
    
    import {useConnections, useCredentialByState, useProofByState} from "@aries-framework/react-hooks";
    
    import Email from "../db-models/Email";
    
    import {CredentialState, ProofState} from "@aries-framework/core";
    import {ConnectionRecord} from "@aries-framework/core/build/modules/connections/repository/ConnectionRecord";
    
    export const useAgentNotifications = (): AgentNotification[] => {
    
      const allConnections = useConnections();
      const newOffers = useCredentialByState(CredentialState.OfferReceived);
      const newProofRequests = useProofByState(ProofState.RequestReceived);
    
      const notifications = useMemo(() => {
        const result: AgentNotification[] = [];
    
        for (const offer of newOffers) {
          let connection: ConnectionRecord | null = null;
          if (offer.connectionId) {
            connection = allConnections.records.find(p => p.id === offer.connectionId) || null;
          }
          result.push({ key: offer.id, credentialOffer: offer, connection: connection });
        }
    
        for (const request of newProofRequests) {
          let connection: ConnectionRecord | null = null;
          if (request.connectionId) {
            connection = allConnections.records.find(p => p.id === request.connectionId) || null;
          }
          result.push({ key: request.id, proofRequest: request, connection: connection });
        }
    
        return result;
      }, [newOffers, newProofRequests, allConnections]);
    
    export const useEmailNotifications = (): Results<Email> => {
      let emailQuery = useQuery(Email);
      emailQuery = emailQuery.filtered(`read == $0`, false);
      emailQuery = emailQuery.sorted('createdAt', true);
    
      return emailQuery;
    };