From ecbfc93fa82c4f0992ccd5283193b8661923466d Mon Sep 17 00:00:00 2001 From: Zouheir Layine Date: Tue, 22 Oct 2024 11:54:53 +0100 Subject: [PATCH 1/3] add offers --- resources/js/components/RadioGroupButton.vue | 4 +++- resources/js/components/pages/Marketplace.vue | 12 ++++++++++++ .../js/components/pages/create/CreateListing.vue | 2 +- resources/js/router/index.ts | 10 ++++++++++ 4 files changed, 26 insertions(+), 2 deletions(-) diff --git a/resources/js/components/RadioGroupButton.vue b/resources/js/components/RadioGroupButton.vue index 0b8d43fc..7a3392df 100644 --- a/resources/js/components/RadioGroupButton.vue +++ b/resources/js/components/RadioGroupButton.vue @@ -11,6 +11,8 @@ { 'md:grid-cols-2': cols === 2, 'md:grid-cols-3': cols === 3, + 'md:grid-cols-4': cols === 4, + 'md:grid-cols-5': cols === 5, }, `mt-4 grid grid-cols-2 gap-y-6 gap-x-4`, ]" @@ -26,7 +28,7 @@
diff --git a/resources/js/components/pages/Marketplace.vue b/resources/js/components/pages/Marketplace.vue index 24f90a04..57c445fc 100644 --- a/resources/js/components/pages/Marketplace.vue +++ b/resources/js/components/pages/Marketplace.vue @@ -25,6 +25,16 @@ const marketTypes = [ label: 'Listings', value: 'ListingsList', }, + { + key: 'btn-offers', + label: 'Offers', + value: 'OffersList', + }, + { + key: 'btn-counter-offers', + label: 'Counter Offers', + value: 'CounterOffersList', + }, { key: 'btn-sales', label: 'Sales', @@ -35,6 +45,8 @@ const marketTypes = [ const martketRoutes = { BidsList: 'platform.marketplace.bids', ListingsList: 'platform.marketplace.listings', + OffersList: 'platform.marketplace.offers', + CounterOffersList: 'platform.marketplace.counter-offers', SalesList: 'platform.marketplace.sales', }; diff --git a/resources/js/components/pages/create/CreateListing.vue b/resources/js/components/pages/create/CreateListing.vue index 1ac005a4..1f3d91c0 100644 --- a/resources/js/components/pages/create/CreateListing.vue +++ b/resources/js/components/pages/create/CreateListing.vue @@ -53,7 +53,7 @@ diff --git a/resources/js/router/index.ts b/resources/js/router/index.ts index 133229ae..a93f085a 100644 --- a/resources/js/router/index.ts +++ b/resources/js/router/index.ts @@ -103,6 +103,16 @@ const routes = [ name: 'platform.marketplace.listings', component: () => import('../components/marketplace/ListingsList.vue'), }, + { + path: 'offers', + name: 'platform.marketplace.offers', + component: () => import('../components/marketplace/OffersList.vue'), + }, + { + path: 'counter-offers', + name: 'platform.marketplace.counter-offers', + component: () => import('../components/marketplace/CounterOffersList.vue'), + }, { path: 'sales', name: 'platform.marketplace.sales', From 1da20b37ed22e8035ab4e87f965f94fd7e264e21 Mon Sep 17 00:00:00 2001 From: Zouheir Layine Date: Tue, 22 Oct 2024 12:28:35 +0100 Subject: [PATCH 2/3] add create offer --- .../marketplace/CounterOffersList.vue | 359 ++++++++++++++++++ .../js/components/marketplace/OffersList.vue | 359 ++++++++++++++++++ .../components/pages/create/CreateListing.vue | 15 +- .../components/pages/create/CreateOffer.vue | 259 +++++++++++++ .../mutation/marketplace/CreateListing.ts | 5 +- resources/js/router/index.ts | 9 + 6 files changed, 998 insertions(+), 8 deletions(-) create mode 100644 resources/js/components/marketplace/CounterOffersList.vue create mode 100644 resources/js/components/marketplace/OffersList.vue create mode 100644 resources/js/components/pages/create/CreateOffer.vue diff --git a/resources/js/components/marketplace/CounterOffersList.vue b/resources/js/components/marketplace/CounterOffersList.vue new file mode 100644 index 00000000..186a12b1 --- /dev/null +++ b/resources/js/components/marketplace/CounterOffersList.vue @@ -0,0 +1,359 @@ + + + diff --git a/resources/js/components/marketplace/OffersList.vue b/resources/js/components/marketplace/OffersList.vue new file mode 100644 index 00000000..7ff35833 --- /dev/null +++ b/resources/js/components/marketplace/OffersList.vue @@ -0,0 +1,359 @@ + + + diff --git a/resources/js/components/pages/create/CreateListing.vue b/resources/js/components/pages/create/CreateListing.vue index 1f3d91c0..4fb72b85 100644 --- a/resources/js/components/pages/create/CreateListing.vue +++ b/resources/js/components/pages/create/CreateListing.vue @@ -281,12 +281,15 @@ const createListing = async () => { collectionId: takeCollectionId.value, tokenId: formatToken(takeTokenId.value), }, - auctionData: enableAuction.value - ? { - startBlock: auctionDataStart.value, - endBlock: auctionDataEnd.value, - } - : null, + listingData: { + type: enableAuction.value ? 'AUCTION' : 'FIXED_PRICE', + auctionParams: enableAuction.value + ? { + startBlock: auctionDataStart.value, + endBlock: auctionDataEnd.value, + } + : undefined, + }, idempotencyKey: idempotencyKey.value, }) ); diff --git a/resources/js/components/pages/create/CreateOffer.vue b/resources/js/components/pages/create/CreateOffer.vue new file mode 100644 index 00000000..7fb714ef --- /dev/null +++ b/resources/js/components/pages/create/CreateOffer.vue @@ -0,0 +1,259 @@ + + + diff --git a/resources/js/graphql/mutation/marketplace/CreateListing.ts b/resources/js/graphql/mutation/marketplace/CreateListing.ts index 10f64f22..ca71e6a8 100644 --- a/resources/js/graphql/mutation/marketplace/CreateListing.ts +++ b/resources/js/graphql/mutation/marketplace/CreateListing.ts @@ -1,11 +1,12 @@ -export default `mutation CreateListing($makeAssetId: MultiTokenIdInput!, $takeAssetId: MultiTokenIdInput!, $amount: BigInt!, $price: BigInt!, $salt: String, $auctionData: AuctionDataInputType, $idempotencyKey: String) { +export default `mutation CreateListing($makeAssetId: MultiTokenIdInput!, $takeAssetId: MultiTokenIdInput!, $amount: BigInt!, $price: BigInt!, $salt: String, $listingData: ListingDataInput, $signingAccount: String, $idempotencyKey: String) { CreateListing( makeAssetId: $makeAssetId takeAssetId: $takeAssetId amount: $amount price: $price salt: $salt - auctionData: $auctionData + listingData: $listingData + signingAccount: $signingAccount idempotencyKey: $idempotencyKey ) { id diff --git a/resources/js/router/index.ts b/resources/js/router/index.ts index a93f085a..e4004312 100644 --- a/resources/js/router/index.ts +++ b/resources/js/router/index.ts @@ -165,6 +165,15 @@ const routes = [ requiresToken: true, }, }, + { + path: '/create/offer', + name: 'platform.create.offer', + component: () => import('../components/pages/create/CreateOffer.vue'), + meta: { + requiresAuth: true, + requiresToken: true, + }, + }, { path: '/create/batch', name: 'platform.create.batch', From 2685d2e04a032f09cd4306fe88aa3626673602aa Mon Sep 17 00:00:00 2001 From: Zouheir Layine Date: Tue, 22 Oct 2024 12:52:20 +0100 Subject: [PATCH 3/3] fix offer form --- .../components/pages/create/CreateListing.vue | 2 +- .../components/pages/create/CreateOffer.vue | 120 +++++++++++++----- 2 files changed, 89 insertions(+), 33 deletions(-) diff --git a/resources/js/components/pages/create/CreateListing.vue b/resources/js/components/pages/create/CreateListing.vue index 4fb72b85..5607c92c 100644 --- a/resources/js/components/pages/create/CreateListing.vue +++ b/resources/js/components/pages/create/CreateListing.vue @@ -150,7 +150,7 @@
diff --git a/resources/js/components/pages/create/CreateOffer.vue b/resources/js/components/pages/create/CreateOffer.vue index 7fb714ef..fd6bd838 100644 --- a/resources/js/components/pages/create/CreateOffer.vue +++ b/resources/js/components/pages/create/CreateOffer.vue @@ -3,7 +3,7 @@

- Create Listing + Create Offer

@@ -21,40 +21,76 @@ > Parameters -

Places a sell order.

+

Places an offer order.

- Make Asset ID + Take Asset ID  *

- The collection and token ID of the asset being sold. + The collection and token ID of the asset being bought.

-
+ + + +
@@ -68,16 +104,17 @@ required :prefix="currencySymbol" /> - - - Current block: {{ currentBlock }} - + + + @@ -133,6 +170,9 @@ import { } from '~/util/schemas'; import { MarketplaceApi } from '~/api/marketplace'; import FormSelect from '~/components/FormSelect.vue'; +import FormCheckbox from '~/components/FormCheckbox.vue'; +import Toggle from '~/components/Toggle.vue'; +import InputHeader from '~/components/InputHeader.vue'; const router = useRouter(); const appStore = useAppStore(); @@ -144,11 +184,18 @@ const salt = ref(''); const expiration = ref(); const currentBlock = ref(); const blockInterval = ref(); -const makeCollectionId = ref(''); -const makeTokenId = ref({ +const enableTakeCollectionId = ref(false); +const enableExpiration = ref(false); +const takeCollectionId = ref(); +const takeTokenId = ref({ tokenId: '', tokenType: TokenIdSelectType.Integer, }); +const makeCollectionId = ref('0'); +const makeTokenId = ref({ + tokenId: '0', + tokenType: TokenIdSelectType.Integer, +}); const idempotencyKey = ref(''); const formRef = ref(); @@ -187,11 +234,20 @@ const invalidSubmit = () => { }); }; -const createListing = async () => { +const createOffer = async () => { if (!(await isValid())) { return; } + if (expiration.value && expiration.value < currentBlock.value) { + snackbar.error({ + title: 'Expiration block', + text: 'Expiration block must be greater than the current block', + }); + + return; + } + try { isLoading.value = true; const res = await MarketplaceApi.createListing( @@ -217,17 +273,17 @@ const createListing = async () => { if (id) { snackbar.success({ - title: 'Listing created', - text: `Listing created with transaction id ${id}`, + title: 'Offer created', + text: `Offer created with transaction id ${id}`, event: id, }); - router.push({ name: 'platform.marketplace.listings' }); + router.push({ name: 'platform.marketplace.offers' }); } } catch (e) { if (snackbarErrors(e)) return; snackbar.error({ - title: 'Listing creation', - text: 'Listing creation failed', + title: 'Offer creation', + text: 'Offer creation failed', }); } finally { isLoading.value = false;