Skip to content

Instantly share code, notes, and snippets.

downloadImage$ = createEffect(
() =>
this.actions$.pipe(
ofType(IpfsImageActions.download_image),
map((action) => action.ipfsHash),
switchMap((ipfsHash: string) =>
this.ipfsSrv.getFile(ipfsHash).pipe(
map((image: Blob) => IpfsImageActions.download_image_success({ image })),
catchError((err: Error) =>
of(ErrorActions.errorMessage({ errorMsg: err.message }), IpfsImageActions.download_image_error())
abortContract$ = createEffect(
() =>
this.actions$.pipe(
ofType(PurchaseContractActions.abortSelectedPurchaseContract),
withLatestFrom(this.store$.pipe(select(fromStore.getSelectedPurchaseContract))),
switchMap(([action, contract]) => {
const dialogConfig = new MatDialogConfig();
dialogConfig.width = '420px';
dialogConfig.disableClose = true;
public abortPurchaseContract(contractAddress: string): Observable<string> {
const contract: Contract = new ethers.Contract(contractAddress, this.abi, this.provider.getSigner());
// Call the contract method, getting back the transaction tx
const token = contract.abortBySeller();
return from(token)
.pipe(
switchMap((tx: any) => {
console.log('abortBySeller Tx:', tx);
reload$ = createEffect(
() =>
this.actions$.pipe(
ofType(
PurchaseContractActions.abortSelectedPurchaseContractSuccess,
PurchaseContractActions.confirmBuySuccess,
PurchaseContractActions.confirmDeliverySuccess),
withLatestFrom(this.store$.pipe(select(fromStore.getSelectedPurchaseContract))),
tap(async ([action, contract]) => {
removeProduct$ = createEffect(
() =>
this.actions$.pipe(
ofType(PurchaseContractActions.removePurchaseContract),
map(payload => payload.key),
switchMap(key => {
const dialogConfig = new MatDialogConfig();
dialogConfig.width = '420px';
dialogConfig.disableClose = true;
public removePurchaseContract(productKey: string): Observable<string> {
const bytes32Key = utils.formatBytes32String(productKey);
const token = this.contractToken.removeContractByKey(bytes32Key);
return from(token)
.pipe(
switchMap((tx: any) => {
console.log('removeContractByKey Transaction', tx);
// Wait for transaction to be mined
confirmBuy$ = createEffect(
() =>
this.actions$.pipe(
ofType(PurchaseContractActions.confirmBuy),
withLatestFrom(this.store$.pipe(select(fromStore.getSelectedPurchaseContract))),
switchMap(([payload, contract]) => {
const dialogConfig = new MatDialogConfig();
dialogConfig.width = '420px';
dialogConfig.disableClose = true;
public confirmPurchase(contractAddress: string, etherValue: string): Observable<string> {
// Connect to the Contract using a Provider
const contract: Contract = new ethers.Contract(contractAddress, this.abi, this.provider.getSigner());
const wei = utils.parseEther(etherValue);
// Call the contract method, getting back the transaction tx
const token = contract.buyerConfirmPurchase({
value: wei
confirmDelivery$ = createEffect(
() =>
this.actions$.pipe(
ofType(PurchaseContractActions.confirmDelivery),
withLatestFrom(this.store$.pipe(select(fromStore.getSelectedPurchaseContract))),
switchMap(([payload, contract]) => {
const dialogConfig = new MatDialogConfig();
dialogConfig.width = '420px';
dialogConfig.disableClose = true;
public confirmDelivery(contractAddress: string): Observable<string> {
// We connect to the Contract using a Provider
const contract: Contract = new ethers.Contract(contractAddress, this.abi, this.provider.getSigner());
// Call the contract method, getting back the transaction tx
const token = contract.buyerConfirmReceived();
return from(token)
.pipe(
switchMap((tx: any) => {