/** * Resolvers for Fulfillment fields * * @package: HoloREA * @since: 2019-08-27 */ import { DNAIdMappings, injectTypename, DEFAULT_VF_MODULES, VfModule, EconomicEventAddress } from '../types.js' import { mapZomeFn, remapCellId } from '../connection.js' import { Fulfillment, EconomicEvent, Commitment, EconomicEventConnection, CommitmentConnection, } from '@valueflows/vf-graphql' import { CommitmentSearchInput, EconomicEventSearchInput } from './zomeSearchInputTypes.js' export default (enabledVFModules: VfModule[] = DEFAULT_VF_MODULES, dnaConfig: DNAIdMappings, conductorUri: string) => { const hasObservation = -1 !== enabledVFModules.indexOf(VfModule.Observation) const hasCommitment = -1 !== enabledVFModules.indexOf(VfModule.Commitment) const readEvents = mapZomeFn(dnaConfig, conductorUri, 'observation', 'economic_event_index', 'query_economic_events') const readCommitments = mapZomeFn(dnaConfig, conductorUri, 'planning', 'commitment_index', 'query_commitments') return Object.assign( (hasCommitment ? { fulfills: injectTypename('Commitment', async (record: Fulfillment): Promise => { const results = await readCommitments({ params: { fulfilledBy: record.id } }) return results.edges.pop()!['node'] }), } : {}), (hasObservation ? { fulfilledBy: injectTypename('EconomicEvent', async (record: Fulfillment): Promise => { const associatedId = remapCellId(record.id, record.fulfilledBy) const results = await readEvents({ params: { fulfills: associatedId } }) return results.edges.pop()!['node'] }), } : {}), ) }