UNPKG

@tapcart/app-studio-components

Version:

A library for accessing global components across different environments with a consistent API

126 lines (90 loc) 3.37 kB
# @tapcart/app-studio-components A shared library for accessing global components across different environments with a consistent API. [![npm version](https://img.shields.io/npm/v/@tapcart/app-studio-components.svg)](https://www.npmjs.com/package/@tapcart/app-studio-components) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) ## Installation ```bash npm install @tapcart/app-studio-components # or yarn add @tapcart/app-studio-components ``` ## Usage This package provides a consistent way to access global components across different environments (CLI, Dashboard, Next.js app). ### Basic Usage ```jsx import { useComponents } from '@tapcart/app-studio-components'; function MyBlock() { // Get all available components const components = useComponents(); // Get a specific component const ProductCard = components.ProductCard; return ( <div> <h2>My Block</h2> {ProductCard && <ProductCard product={someProduct} />} </div> ); } ``` ### Setting Up the Provider Each environment needs to set up a `ComponentProvider` with the appropriate component source: ```jsx import { ComponentProvider } from '@tapcart/app-studio-components'; // Load components from your source (filesystem, API, etc.) const componentSource = { ProductCard: ProductCardComponent, Button: ButtonComponent, // ...other components }; function App() { return ( <ComponentProvider componentSource={componentSource}> <YourApp /> </ComponentProvider> ); } ``` ## Environment-Specific Implementations ### CLI In the CLI, components are loaded from the local filesystem: ```jsx import { ComponentProvider } from '@tapcart/app-studio-components'; // Load components from filesystem const filesystemComponents = loadComponentsFromFilesystem(); function App() { return ( <ComponentProvider componentSource={filesystemComponents}> <Block /> </ComponentProvider> ); } ``` ### Dashboard/Next.js In production environments, components are loaded from the API: ```jsx import { ComponentProvider } from '@tapcart/app-studio-components'; // Load components from API const apiComponents = await fetchComponentsFromAPI(); function App() { return ( <ComponentProvider componentSource={apiComponents}> <Block /> </ComponentProvider> ); } ``` ## Benefits - **Consistent API**: Use the same code to access components across all environments - **Environment-Specific Loading**: Each environment can load components differently while maintaining the same interface - **Simplified Component Usage**: Components are automatically available through the `useComponents` hook - **Improved Developer Experience**: No need for special flags or configuration ## Contributing Contributions are welcome! Please feel free to submit a Pull Request. ## License This project is licensed under the MIT License - see the LICENSE file for details. ## Additional Benefits - **Consistent Interface**: The `useComponents` hook behaves identically across all environments - **Separation of Concerns**: The hook is decoupled from the component source - **Testability**: Easy to mock components for testing - **Portability**: Blocks can be moved between environments without changes - **Maintainability**: Single source of truth for the hook implementation