A collection of reusable React UI components for UiPath applications.
A powerful and flexible datatable component with full CRUD support, master-detail views, inline editing, and more.
Features:
- β Full CRUD operations (Create, Read, Update, Delete)
- π Master-detail view with grouping
- βοΈ Inline editing with multiple field types
- π Filtering, sorting, and pagination
- π¨ Customizable columns and styling
- π Foreign key relationship support
- π Diff viewer for change review
- β Comprehensive test coverage
A multi-file upload component that allows users to select and upload multiple files to a UiPath bucket.
Features:
- π Multiple file selection
- βοΈ Upload to UiPath buckets
- β Success/error callbacks
- π File type filtering
- π File size limits
- π Custom path support
npm install# Start development server
npm run dev
# Build all packages
npm run build
# Run linter
npm run lint
# Start Storybook
npm run storybook
# Build Storybook
npm run build-storybook# Run all tests
npm test
# Run tests in watch mode
npm test -- --watch
# Run tests with UI
npm run test:ui
# Generate coverage report
npm run test:coverageSee TEST_GUIDE.md for comprehensive testing documentation.
This project uses Storybook for component documentation and development. Storybook provides an interactive UI for viewing and testing components in isolation.
npm run storybookThis will start Storybook on http://localhost:6006.
npm run build-storybookThis creates a static build of Storybook in the storybook-static directory.
Storybook is automatically deployed to GitHub Pages when changes are pushed to the main or develop branches. The deployment workflow builds both the packages and Storybook, then publishes the static Storybook site.
To enable GitHub Pages deployment:
- Go to your repository settings
- Navigate to Pages
- Set Source to "GitHub Actions"
uipath-ui-widgets/
βββ packages/
β βββ datatable/ # DataTable component package
β βββ src/
β β βββ components/ # React components
β β βββ hooks/ # Custom React hooks
β β βββ utils/ # Utility functions
β β βββ types.ts # TypeScript types
β βββ package.json
βββ samples/ # Sample applications
βββ test/ # Test setup and utilities
β βββ setup.ts # Test configuration
β βββ utils/ # Test helpers
βββ vitest.config.ts # Vitest configuration
βββ package.json
This project follows testing best practices with comprehensive unit test coverage:
- Test Framework: Vitest
- Testing Library: React Testing Library
- Coverage Target: 80%+ for statements, branches, functions, and lines
Key testing principles:
- β Test behavior, not implementation
- β Use accessible queries
- β Follow AAA pattern (Arrange-Act-Assert)
- β Mock external dependencies
- β Test edge cases and error states
- React 19 - UI library
- TypeScript - Type safety
- Vite - Build tool
- ag-Grid - Data grid component
- Material-UI - UI components
- Vitest - Test runner
- React Testing Library - Component testing
The React Compiler is enabled on this project. See React Compiler documentation for more information.
Note: This will impact Vite dev & build performances.
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
export default defineConfig([
globalIgnores(["dist"]),
{
files: ["**/*.{ts,tsx}"],
extends: [
// Other configs...
// Remove tseslint.configs.recommended and replace with this
tseslint.configs.recommendedTypeChecked,
// Alternatively, use this for stricter rules
tseslint.configs.strictTypeChecked,
// Optionally, add this for stylistic rules
tseslint.configs.stylisticTypeChecked,
// Other configs...
],
languageOptions: {
parserOptions: {
project: ["./tsconfig.node.json", "./tsconfig.app.json"],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
]);You can also install eslint-plugin-react-x and eslint-plugin-react-dom for React-specific lint rules:
// eslint.config.js
import reactX from "eslint-plugin-react-x";
import reactDom from "eslint-plugin-react-dom";
export default defineConfig([
globalIgnores(["dist"]),
{
files: ["**/*.{ts,tsx}"],
extends: [
// Other configs...
// Enable lint rules for React
reactX.configs["recommended-typescript"],
// Enable lint rules for React DOM
reactDom.configs.recommended,
],
languageOptions: {
parserOptions: {
project: ["./tsconfig.node.json", "./tsconfig.app.json"],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
]);