From 10ce27683d272d3ec313a75bd799bff767a96493 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFs=20Mansot?= <26844641+devfull@users.noreply.github.com> Date: Tue, 26 Sep 2023 08:51:34 +0200 Subject: [PATCH] integrate anchoring and proof download --- package.json | 10 ++-- .../OfficeFolderAnchors.ts | 53 +++++++++++++++++++ .../Folder/FolderInformation/index.tsx | 30 +++++++++++ 3 files changed, 87 insertions(+), 6 deletions(-) create mode 100644 src/front/Api/LeCoffreApi/Notary/OfficeFolderAnchors/OfficeFolderAnchors.ts diff --git a/package.json b/package.json index b7a652af..887f94c5 100644 --- a/package.json +++ b/package.json @@ -24,7 +24,7 @@ "eslint-config-next": "13.2.4", "form-data": "^4.0.0", "jwt-decode": "^3.1.2", - "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.73", + "le-coffre-resources": "git@github.com:smart-chain-fr/leCoffre-resources.git#v2.77", "next": "13.2.4", "prettier": "^2.8.7", "react": "18.2.0", @@ -32,9 +32,7 @@ "react-select": "^5.7.2", "sass": "^1.59.2", "sharp": "^0.32.1", - "typescript": "4.9.5" - }, - "devDependencies": {} + "typescript": "4.9.5", + "uuidv4": "^6.2.13" + } } - - diff --git a/src/front/Api/LeCoffreApi/Notary/OfficeFolderAnchors/OfficeFolderAnchors.ts b/src/front/Api/LeCoffreApi/Notary/OfficeFolderAnchors/OfficeFolderAnchors.ts new file mode 100644 index 00000000..d56e7f46 --- /dev/null +++ b/src/front/Api/LeCoffreApi/Notary/OfficeFolderAnchors/OfficeFolderAnchors.ts @@ -0,0 +1,53 @@ +import { ContentType } from "@Front/Api/BaseApiService"; +import BaseNotary from "../BaseNotary"; + +import CookieService from "@Front/Services/CookieService/CookieService"; + +export default class OfficeFolderAnchors extends BaseNotary { + private static instance: OfficeFolderAnchors; + private readonly baseURl = this.namespaceUrl.concat("/anchors"); + + private constructor() { + super(); + } + + public static getInstance() { + if (!this.instance) { + return new this(); + } else { + return this.instance; + } + } + + public async get(uid: string): Promise { + const url = new URL(this.baseURl.concat(`/${uid}`)); + try { + return await this.getRequest(url); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + public async post(uid: string): Promise { + const url = new URL(this.baseURl.concat(`/${uid}`)); + try { + return await this.postRequest(url, {}); + } catch (err) { + this.onError(err); + return Promise.reject(err); + } + } + + public async download(uid: string): Promise { + const url = new URL(this.baseURl.concat(`/download/${uid}`)); + try { + return await this.getRequest(url, undefined, ContentType.PDF, "attestation.pdf"); + } catch (err) { + console.log("ERROR: ", err); + this.onError(err); + return Promise.reject(err); + } + } + +} diff --git a/src/front/Components/Layouts/Folder/FolderInformation/index.tsx b/src/front/Components/Layouts/Folder/FolderInformation/index.tsx index 54ecb7a5..e4de5056 100644 --- a/src/front/Components/Layouts/Folder/FolderInformation/index.tsx +++ b/src/front/Components/Layouts/Folder/FolderInformation/index.tsx @@ -1,5 +1,6 @@ import ChevronIcon from "@Assets/Icons/chevron.svg"; import Folders from "@Front/Api/LeCoffreApi/Notary/Folders/Folders"; +import OfficeFolderAnchors from "@Front/Api/LeCoffreApi/Notary/OfficeFolderAnchors/OfficeFolderAnchors"; import Button, { EButtonVariant } from "@Front/Components/DesignSystem/Button"; import FolderBoxInformation, { EFolderBoxInformationType } from "@Front/Components/DesignSystem/FolderBoxInformation"; import TextAreaField from "@Front/Components/DesignSystem/Form/TextareaField"; @@ -112,6 +113,11 @@ class FolderInformationClass extends BasePage { Ancrer le dossier )} + {this.everyDocumentValidated() && ( + + )} {!this.doesFolderHaveCustomer() && ( @@ -234,6 +240,7 @@ class FolderInformationClass extends BasePage { try { const timeoutDelay = 9800; + await this.anchorFolder(); setTimeout(() => { this.setState({ isValidateModalVisible: false, @@ -245,6 +252,29 @@ class FolderInformationClass extends BasePage { hasValidateAnchoring: false, }); }, timeoutDelay + 1000); + } catch (e) { + this.setState({ + isValidateModalVisible: false, + hasValidateAnchoring: false, + }); + console.error(e); + } + } + + private async anchorFolder() { + if (!this.state.selectedFolder?.uid) return; + const anchor = await OfficeFolderAnchors.getInstance().post(this.state.selectedFolder.uid); + console.log(anchor); + } + + private async downloadAnchoringProof(uid?: string) { + if (!uid) return; + + const anchor = await OfficeFolderAnchors.getInstance().get(uid); + if (anchor.transactions[0].status !== "VERIFIED_ON_CHAIN") return; + + try { + await OfficeFolderAnchors.getInstance().download(uid); } catch (e) { console.error(e); }