How to implement the service creation?
In the Post Job section, users can create a service. We will use and detail the function createService
Good to Know
In this example, we will use reactJS, Ether.js and formik to handle the form on the frontend. You will find a full code example with all imports at the end of tutorial.
① Create a Form for the service creation
The user will create a service (ServiceForm component)
// The interface for the inupt field of your form
interface IFormValues {
title: string;
about: string;
keywords: string;
rateToken: string;
rateAmount: number;
}
// As we using Formik we use the validationSchema to check all the input value
const validationSchema = Yup.object({
title: Yup.string().required('Please provide a title for your service'),
about: Yup.string().required('Please provide a description of your service'),
keywords: Yup.string().required('Please provide keywords for your service'),
rateToken: Yup.string().required('Please select a payment token'),
rateAmount: Yup.number()
.required('Please provide an amount for your service')
.when('rateToken', {
is: (rateToken: string) => rateToken !== '',
then: schema =>
schema.moreThan(
selectedToken
? FixedNumber.from(
ethers.utils.formatUnits(
selectedToken?.minimumTransactionAmount as BigNumberish,
selectedToken?.decimals,
),
).toUnsafeFloat()
: 0,
`Amount must be greater than ${
selectedToken
? FixedNumber.from(
ethers.utils.formatUnits(
selectedToken?.minimumTransactionAmount as BigNumberish,
selectedToken?.decimals,
),
).toUnsafeFloat()
: 0
}`,
),
}),
});
Let's create our form
② Handle Submit and Post the service
On submit, we create a new transaction and call the createService for that we will need our contract instance and all the parameter including the CID (offchain data stored on IPFS)
③ Get the Proposal by User With Subgraph API
Here is an example of a Graph Query you can use to get the service by id
See the Full Code Implemented on Our Demo DAPP
processRequest utils function:
IPFS : https://github.com/TalentLayer-Labs/indie-frontend/blob/main/src/utils/ipfs.ts
Last updated
Was this helpful?