1.1.2 • Published 8 months ago

react-better-utils v1.1.2

Weekly downloads
-
License
ISC
Repository
github
Last release
8 months ago

React Better Utils

Test and Build Workflow

This is a ReactJS library to help you have a better, clean and readable code when it comes to iterating and conditioning things in your JSX or TSX file.

Usage

Show Util

See this code. With more than one condition that need to be handled, it barely readable right? It also less maintainable if we need to add condition.

import React from 'react';

const UserDashboard = ({
  user,
}: {
  user: { status: string; name: string };
}) => {
  return (
    <div className="dashboard">
      <h1>Welcome, {user.name}!</h1>
      {user.status === 'active' ? (
        <p className="text-green-600">
          Your account is active. Enjoy the services!
        </p>
      ) : user.status === 'pending' ? (
        <p className="text-green-600">
          Your account is pending approval. Please wait for confirmation.
        </p>
      ) : user.status === 'suspended' ? (
        <p className="text-green-600">
          Your account is suspended. Please contact support to resolve the
          issue.
        </p>
      ) : (
        <p className="text-gray-600">
          We couldn't determine your account status. Please refresh the page.
        </p>
      )}
    </div>
  );
};

export default UserDashboard;

But if you use react-better-utils, you can organize your code better and with this handler, your code will be more maintainable when you need to add more condition.

import React from 'react';
import { Show } from 'react-better-utils';

const UserDashboard = ({
  user,
}: {
  user: { status: string; name: string };
}) => {
  return (
    <div className="dashboard">
      <h1>Welcome, {user.name}!</h1>

      <Show>
        {/* Show content for active users */}
        <Show.When isTrue={user.status === 'active'}>
          <p className="text-green-600">
            Your account is active. Enjoy the services!
          </p>
        </Show.When>

        {/* Show content for pending users */}
        <Show.When isTrue={user.status === 'pending'}>
          <p className="text-yellow-500">
            Your account is pending approval. Please wait for confirmation.
          </p>
        </Show.When>

        {/* Show content for suspended users */}
        <Show.When isTrue={user.status === 'suspended'}>
          <p className="text-red-600">
            Your account is suspended. Please contact support to resolve the
            issue.
          </p>
        </Show.When>

        {/* Default message for undefined status */}
        <Show.Else>
          <p className="text-gray-600">
            We couldn't determine your account status. Please refresh the page.
          </p>
        </Show.Else>
      </Show>
    </div>
  );
};

export default UserDashboard;

Each Util

Iterating in React are simple, we add iteration from an array and then render it. Like below:

import React from 'react';

const items = ['Apple', 'Banana', 'Cherry'];

const WithoutEach = () => {
  return (
    <div>
      <h2>Without Each</h2>
      {items.map((item, index) => (
        <div key={index} className="item">
          {index + 1}. {item}
        </div>
      ))}
    </div>
  );
};

export default WithoutEach;

Using Each component from react-better-utils will make iteration inside your code more readable, cleaner, and more maintainable

import React from 'react';
import { Each } from 'react-better-utils';

const items = ['Apple', 'Banana', 'Cherry'];

const WithEach = () => {
  return (
    <div>
      <h2>With Each</h2>
      <Each
        of={items}
        render={({ item, index }) => (
          <div key={index} className="item">
            {index + 1}. {item}
          </div>
        )}
      />
    </div>
  );
};

export default WithEach;

Installation

Install the Show component from npm, it's inside react-better-utils dependency:

npm install react-better-utils

or if you use yarn

yarn add react-better-utils

API Reference

Show

The main wrapper component that evaluates the conditions. Prop | Type | Description --- | --- | --- children | ReactNode | Contains Show.When and/or Show.Else.

Show.When

Used for conditional rendering when the condition is true. Prop | Type | Description --- | --- | --- isTrue | boolean | The condition to evaluate. children | ReactNode | Content to render if condition passes.

Show.Else

Fallback rendering when none of the Show.When conditions are satisfied. Prop | Type | Description --- | --- | --- render | boolean | Optional additional render condition. children | ReactNode | Contains Show.When and/or Show.Else.

Each

Iteration renderer for array object. Prop | Type | Description --- | --- | --- of | object | Data that will be rendered. render | Callback Function | Render anything inside the callback function.

render Parameters on Each Component

render Callback Function params. Prop | Type | Description --- | --- | --- item | object | Single data item to be rendered. index | number | Index number of data.

Development

Running Locally

Clone the repository and install dependencies:

git clone https://github.com/ilhamfi27/react-better-utils
cd react-better-utils
yarn

Testing

Run tests to ensure everything works as expected:

npm test

Contributing

Contributions are welcome! Please submit a pull request or open an issue if you encounter a problem.

1.1.2

8 months ago

1.1.1

8 months ago

1.1.0

8 months ago

1.0.0

8 months ago