Skip to main content

Additional Status Components

Additional status components provide specialized status displays and customizable status formatting beyond the main status components. These components handle policy violations, custom status mapping, and advanced badge configurations.

Overview​

This document covers additional status components that provide specialized functionality for displaying various status states, policy violations, and customizable status badges.

Components Overview​

Badge Components​


PolicyViolationBadge​

A specialized badge component for displaying policy violation status with optional tooltip information.

Component Location​

import PolicyViolationBadge from 'components/Status/PolicyViolationBadge';

Props​

PropTypeRequiredDefaultDescription
statusTextstring✓-The status text to display
tooltipstring--Optional tooltip text for additional information

TypeScript Interface​

interface TPolicyViolationBadge {
statusText: string;
tooltip?: string;
}

Usage Examples​

Basic Usage​

import PolicyViolationBadge from 'components/Status/PolicyViolationBadge';

function PolicyStatus() {
return <PolicyViolationBadge statusText='Policy Violation' />;
}

With Tooltip​

import PolicyViolationBadge from 'components/Status/PolicyViolationBadge';

function DetailedPolicyStatus() {
return (
<PolicyViolationBadge
statusText='Attendance Policy Violation'
tooltip='Employee exceeded maximum allowed late arrivals for this month'
/>
);
}

In Table Display​

import PolicyViolationBadge from 'components/Status/PolicyViolationBadge';

function EmployeeTable() {
const renderPolicyStatus = employee => {
if (employee.policyViolations?.length > 0) {
return (
<PolicyViolationBadge
statusText={`${employee.policyViolations.length} Violation(s)`}
tooltip={employee.policyViolations.map(v => v.description).join(', ')}
/>
);
}
return &lt;Text&gt;No Violations</Text>;
};

return (
&lt;Table&gt;
{/* Table structure */}
&lt;Td&gt;{renderPolicyStatus(employee)}</Td>
</Table>
);
}

Styling​

Colors​

  • Background: hue-green.50
  • Border: 1px solid hue-green.400
  • Text color: navy
  • Badge color: hue-green.600

Layout​

  • Display: flex
  • Align items: center
  • Flex wrap: nowrap
  • Width: fit-content
  • Variant: outline

Typography​

  • Font weight: normal
  • Font size: 12px
  • Line height: 22px
  • Text style: body-small

Accessibility​

  • Tooltip with arrow for additional information
  • Keyboard accessible tooltip
  • Screen reader friendly text
  • High contrast colors for readability

WpBaseStatusFormatter​

A highly customizable status badge component with flexible styling, icon support, and configurable status mapping.

Component Location​

import WpBaseStatusFormatter from 'components/Status/WpBaseStatusFormatter';

Props​

PropTypeRequiredDefaultDescription
statusstring✓-Status value to display
statusMapStatusMap-defaultStatusMapCustom status mapping configuration
titlestring--Optional title override
hasDotboolean-trueShow status dot indicator
leftIconIconConfig--Custom left icon configuration
rightIconIconConfig--Custom right icon configuration
customColorsPartial<StatusEntry>--Custom color overrides
sizestring-'md'Badge size

TypeScript Interfaces​

interface StatusEntry {
bgColor: string;
color: string;
dotColor: string;
defaultTitle: string;
}

interface StatusMap {
[key: string]: StatusEntry;
}

interface IconConfig {
icon?: ReactNode;
tooltip: string;
}

interface WpBaseStatusBadgeProps<T extends string> {
status: T;
statusMap?: StatusMap;
title?: string;
hasDot?: boolean;
leftIcon?: IconConfig;
rightIcon?: IconConfig;
customColors?: Partial&lt;StatusEntry&gt;;
size?: string;
}

Default Status Map​

The component includes a comprehensive default status map:

const defaultStatusMap = {
success: {
bgColor: 'hue-green.100',
color: 'hue-green.800',
dotColor: 'hue-green.400',
defaultTitle: 'Success',
},
warning: {
bgColor: 'hue-chrome.100',
color: 'hue-chrome.800',
dotColor: 'hue-chrome.400',
defaultTitle: 'Warning',
},
error: {
bgColor: 'hue-red.100',
color: 'hue-red.800',
dotColor: 'hue-red.400',
defaultTitle: 'Error',
},
neutral: {
bgColor: 'hue-gray.100',
color: 'hue-gray.800',
dotColor: 'hue-gray.400',
defaultTitle: 'Neutral',
},
info: {
bgColor: 'hue-sea.100',
color: 'hue-sea.800',
dotColor: 'hue-sea.400',
defaultTitle: 'Info',
},
};

Usage Examples​

Basic Usage​

import WpBaseStatusFormatter from 'components/Status/WpBaseStatusFormatter';

function BasicStatus() {
return <WpBaseStatusFormatter status='success' />;
}

Custom Title​

import WpBaseStatusFormatter from 'components/Status/WpBaseStatusFormatter';

function CustomTitleStatus() {
return <WpBaseStatusFormatter status='success' title='Payroll Processed' />;
}

Custom Status Map​

import WpBaseStatusFormatter from 'components/Status/WpBaseStatusFormatter';

function CustomStatusMap() {
const payrollStatusMap = {
draft: {
bgColor: 'gray.100',
color: 'gray.800',
dotColor: 'gray.400',
defaultTitle: 'Draft',
},
processing: {
bgColor: 'blue.100',
color: 'blue.800',
dotColor: 'blue.400',
defaultTitle: 'Processing',
},
completed: {
bgColor: 'green.100',
color: 'green.800',
dotColor: 'green.400',
defaultTitle: 'Completed',
},
failed: {
bgColor: 'red.100',
color: 'red.800',
dotColor: 'red.400',
defaultTitle: 'Failed',
},
};

return (
<WpBaseStatusFormatter status='processing' statusMap={payrollStatusMap} />
);
}

With Custom Icons​

import WpBaseStatusFormatter from 'components/Status/WpBaseStatusFormatter';
import { CheckCircleIcon, InfoIcon } from '@chakra-ui/icons';

function StatusWithIcons() {
return (
<WpBaseStatusFormatter
status='success'
leftIcon={{
icon: <CheckCircleIcon />,
tooltip: 'Operation completed successfully',
}}
rightIcon={{
icon: <InfoIcon />,
tooltip: 'Click for more details',
}}
/>
);
}

Without Dot Indicator​

import WpBaseStatusFormatter from 'components/Status/WpBaseStatusFormatter';

function NoDotStatus() {
return (
<WpBaseStatusFormatter
status='info'
hasDot={false}
title='Information Only'
/>
);
}

Custom Color Override​

import WpBaseStatusFormatter from 'components/Status/WpBaseStatusFormatter';

function CustomColorStatus() {
return (
<WpBaseStatusFormatter
status='success'
customColors={{
bgColor: 'purple.100',
color: 'purple.800',
dotColor: 'purple.400',
}}
title='Custom Purple Status'
/>
);
}

Employee Status Example​

import WpBaseStatusFormatter from 'components/Status/WpBaseStatusFormatter';

function EmployeeStatusDisplay() {
const employeeStatusMap = {
active: {
bgColor: 'green.100',
color: 'green.800',
dotColor: 'green.400',
defaultTitle: 'Active',
},
inactive: {
bgColor: 'gray.100',
color: 'gray.800',
dotColor: 'gray.400',
defaultTitle: 'Inactive',
},
on_leave: {
bgColor: 'orange.100',
color: 'orange.800',
dotColor: 'orange.400',
defaultTitle: 'On Leave',
},
terminated: {
bgColor: 'red.100',
color: 'red.800',
dotColor: 'red.400',
defaultTitle: 'Terminated',
},
};

return (
<WpBaseStatusFormatter
status='on_leave'
statusMap={employeeStatusMap}
rightIcon={{
tooltip: 'Employee is currently on approved leave',
}}
/>
);
}

Integration Patterns​

Table Cell Status​

import WpBaseStatusFormatter from 'components/Status/WpBaseStatusFormatter';

function StatusTableCell({ status, details }) {
return (
&lt;Td&gt;
<WpBaseStatusFormatter
status={status}
rightIcon={
details
? {
tooltip: details,
}
: undefined
}
/>
</Td>
);
}

Card Status Display​

import WpBaseStatusFormatter from 'components/Status/WpBaseStatusFormatter';

function PayrollCard({ payroll }) {
return (
&lt;Card&gt;
&lt;CardHeader&gt;
<HStack justify='space-between'>
&lt;Text&gt;Payroll {payroll.month}</Text>
<WpBaseStatusFormatter
status={payroll.status}
statusMap={payrollStatusMap}
/>
</HStack>
</CardHeader>
</Card>
);
}

Filter Status Options​

import WpBaseStatusFormatter from 'components/Status/WpBaseStatusFormatter';

function StatusFilter({ onStatusChange }) {
const statusOptions = ['all', 'active', 'inactive', 'pending'];

return (
&lt;HStack&gt;
{statusOptions.map(status => (
<Button
key={status}
variant='ghost'
onClick={() => onStatusChange(status)}
>
<WpBaseStatusFormatter status={status} size='sm' />
</Button>
))}
</HStack>
);
}

Styling​

Badge Properties​

  • Variant: subtle
  • Display: flex
  • Align items: center
  • Width: fit-content

Typography​

  • Font size: 12px
  • Text transform: capitalize
  • Margin: 1 (between elements)

Icon Support​

  • Left icon: Default dot or custom icon
  • Right icon: Optional with tooltip
  • Tooltip placement: bottom
  • Arrow size: 6

Accessibility​

  • ARIA-compliant badge structure
  • Keyboard accessible tooltips
  • Screen reader friendly status text
  • High contrast color combinations
  • Focus management for interactive elements

Performance Considerations​

  • Memoized status calculations
  • Efficient color mapping
  • Optimized re-renders
  • Minimal DOM structure

Customization​

Color Theming​

  • Supports Chakra UI color tokens
  • Custom color overrides
  • Consistent color patterns
  • Theme-aware implementations

Icon Customization​

  • Custom left/right icons
  • Tooltip integration
  • Icon positioning
  • Responsive icon sizing

Size Variants​

  • Multiple size options
  • Responsive sizing
  • Consistent proportions
  • Flexible layouts

Migration Notes​

From Legacy Status Components​

Update Status Badges​

// Old approach
<Badge colorScheme="green">Active</Badge>

// New approach
<WpBaseStatusFormatter
status="active"
title="Active Employee"
/>

Policy Status Migration​

// Old approach
<Badge variant="outline" colorScheme="red">
Policy Violation
</Badge>

// New approach
<PolicyViolationBadge
statusText="Policy Violation"
tooltip="Attendance policy exceeded"
/>

Breaking Changes​

  • StatusFormatter props updated
  • Custom color structure changed
  • Icon configuration modified

Upgrade Paths​

  1. Replace basic status badges with WpBaseStatusFormatter
  2. Migrate policy indicators to PolicyViolationBadge
  3. Update custom status maps to new structure
  4. Implement new icon configuration patterns

Best Practices​

Status Mapping​

  • Use consistent status keys across application
  • Implement meaningful color coding
  • Provide clear status titles
  • Document status meanings

Tooltip Usage​

  • Provide helpful additional information
  • Keep tooltip text concise
  • Use appropriate placement
  • Consider mobile accessibility

Performance​

  • Implement proper memoization
  • Use consistent status maps
  • Minimize color calculations
  • Optimize re-render cycles

Color Guidelines​

  • Follow brand color patterns
  • Ensure accessibility compliance
  • Use semantic color meanings
  • Test color contrast ratios

Testing Strategies​

Unit Tests​

  • Test status mapping logic
  • Verify color applications
  • Test icon configurations
  • Validate tooltip functionality

Visual Testing​

  • Screenshot comparison tests
  • Cross-browser compatibility
  • Mobile responsive testing
  • Accessibility compliance testing

Integration Tests​

  • Test with real data
  • Verify table integrations
  • Test filter functionality
  • Validate state changes

Accessibility​

ARIA Support​

  • Proper badge semantics
  • Descriptive labels
  • Status announcements
  • Screen reader compatibility

Keyboard Navigation​

  • Focusable interactive elements
  • Tooltip keyboard access
  • Proper tab order
  • Escape key handling

Visual Accessibility​

  • High contrast colors
  • Clear visual hierarchy
  • Sufficient color contrast
  • Readable typography

Screen Reader Support​

  • Meaningful text alternatives
  • Status change announcements
  • Context information
  • Navigation landmarks