incridea-nmamit / incridea-client

Official Repository of Incridea Frontend!
https://incridea.in
11 stars 24 forks source link
apollo-client class-variance-authority framer-motion graphql nextjs rive tailwindcss typescript

Incridea client repo

Tech Stack

Frontend

Docs

Local setup

  1. Clone the repository
git clone https://github.com/incridea-23/incridea-client.git
  1. Install all dependencies
npm i
  1. Run the development server:
npm run dev

Open http://localhost:3000 with your browser to see the result.

Apollo client workflow

  1. Write a query or mutation under /src/graphql folder. Refer Playground for syntax.

    Query Example ```graphql query GetAllUsers { users { id name email } } ```
    Mutation Example ```graphql mutation SignUp($email: String!, $name: String!, $password: String!) { signUp(data: { email: $email, name: $name, password: $password }) { __typename ... on Error { message } ... on MutationSignUpSuccess { __typename } } } ```
  2. Run the below command to generate the types for your queries/mutations.

npm run codegen
  1. Refer the below examples for queries and mutations.

Querying example

Data fetching options in Next.js

1. CSR ```typescript import { useQuery } from "@apollo/client"; import { NextPage } from "next"; import { GetAllUsersDocument } from "../generated/generated"; const CSR: NextPage = () => { const { data, loading, error } = useQuery(GetAllUsersDocument); const users = data?.users; return (
{loading &&
Loading...
} {error &&
Error: {error.message}
} {users?.map((user) => (
{user.name}
))}
); }; export default CSR; ```
2. SSG ```typescript import { NextPage } from "next"; import { GetAllUsersDocument } from "../generated/generated"; import { initializeApollo } from "../lib/apollo"; const SSG: NextPage<{ users: { id: string; name: string; }[]; }> = ({ users }) => { return (
{users.map((user) => (
{user.name}
))}
); }; export const getStaticProps = async () => { const apolloClient = initializeApollo(); const res = await apolloClient.query({ query: GetAllUsersDocument, }); return { props: { users: res.data.users, }, }; }; export default SSG; ```
3. SSR Replace `getStaticProps` to `getServerSideProps`.
4. ISR Add an invalidate option to SSG.
5. On-demand ISR [Read about it here.](https://nextjs.org/docs/basic-features/data-fetching/incremental-static-regeneration#on-demand-revalidation)

Mutation example

Example ```typescript import { SignUpDocument } from '@/src/generated/generated'; import { useMutation } from '@apollo/client'; signUpMutation({ variables: { name: userInfo.name, email: userInfo.email, password: userInfo.password, }, }) .then((res) => { if (res.data?.signUp.\_\_typename === 'MutationSignUpSuccess') { router.push('/auth/verify-email'); } }) .catch((err) => { return err; }); ````

Note Refer Sign up mutation for full code.

Branching and Making PRs

  1. After cloning and setting up the environment, checkout to a new branch (name is related to your task, for eg: feat/user-login, fix/image-overflow)
git checkout -b <branch_name>
  1. Make the required changes according to your task.
//Staging changes
git add .
//Commiting changes
git commit -m <short message about task>
//Pushing changes
git push origin <branch_name>
  1. Make a Pull request to main branch, and wait for it to get reviewed by someone in the team. If there are review comments, make a new commit making those changes to the same branch to address those comments.

Development Notes

  • Please join Incridea org on Trello from the invite link shared on Discord.
  • Use the HeadComponent while developing a new page and provide it with suitable title and description for better SEO.
  • Use semantic commit messages to keep the commit history clean.
Semantic commits ``` [optional scope]: [optional body] [optional footer(s)] ``` - feat – a new feature is introduced with the changes - fix – a bug fix has occurred - chore – changes that do not relate to a fix or feature and don't modify src or test files (for example updating dependencies) - refactor – refactored code that neither fixes a bug nor adds a feature - docs – updates to documentation such as a the README or other markdown files - style – changes that do not affect the meaning of the code, likely related to code formatting such as white-space, missing semi-colons, and so on. - test – including new or correcting previous tests - perf – performance improvements - ci – continuous integration related - build – changes that affect the build system or external dependencies - revert – reverts a previous commit