requestRecords function

dynamic requestRecords(
  1. String domain,
  2. StateApi state,
  3. EntityDetails entities
)

Implementation

requestRecords(String domain, StateApi state, EntityDetails entities) async {
  try {
    final domainId = await domainToNonFungId(domain);

    final recordsVaultIdResponse = await state.keyValueStoreData(
        stateKeyValueStoreDataRequest: StateKeyValueStoreDataRequest((builder) {
      builder.keyValueStoreAddress = entities.recordServiceVaultId;
      builder.keys.add(StateKeyValueStoreDataRequestKeyItem((builder) {
        final key = ProgrammaticScryptoSborValueNonFungibleLocalId(
            (builder) => builder.value = domainId);
        builder.keyJson = key;
      }));
    })).then((s) => s.data);

    final recordsVaultId = (recordsVaultIdResponse?.entries[0].value
            .programmaticJson as ProgrammaticScryptoSborValueOwn?)
        ?.value;

    if (recordsVaultId == null) {
      return [];
    }

    final recordIdsResponse = await state.entityNonFungibleIdsPage(
        stateEntityNonFungibleIdsPageRequest:
            StateEntityNonFungibleIdsPageRequest((builder) {
      builder.address = entities.rnsStorage;
      builder.resourceAddress = entities.resolverRecordResource;
      builder.vaultAddress = recordsVaultId;
    })).then((s) => s.data);

    final recordIds = recordIdsResponse?.items;

    final nftDataList = await state.nonFungibleData(
        stateNonFungibleDataRequest: StateNonFungibleDataRequest((builder) {
      builder.resourceAddress = entities.resolverRecordResource;
      builder.nonFungibleIds.addAll(recordIds ?? []);
    })).then((s) => s.data?.nonFungibleIds);

    return nftDataList?.map((nft) {
      if (nft.data?.programmaticJson.kind ==
          ProgrammaticScryptoSborValueKind.tuple) {
        return (nft.data?.programmaticJson as ProgrammaticScryptoSborValueTuple)
            .fields
            .fold<RecordItem>(
          RecordItem(
            recordId: nft.nonFungibleId,
            keyImageUrl: '',
            platformIdentifier: '',
            domainId: '',
            context: '',
            idAdditions: [],
          ),
          (acc, field) {
            return parseRecordData(field, acc);
          },
        );
      }
      return RecordItem(
        recordId: nft.nonFungibleId,
        keyImageUrl: '',
        platformIdentifier: '',
        domainId: '',
        context: '',
        idAdditions: [],
      );
    }).toList();
  } catch (e) {
    print(e);
    return null;
  }
}