- Added a disabled state to the submit button in FormFooter to prevent multiple submissions while a mutation is in progress.
- Included a blank line in useCreateCustomerPresenter for improved code readability.
- Updated the Select component to disable the placeholder option for better user experience.
- Refactored AssignToCompanyModalContent to accept a companiesQuery prop, improving data handling.
- Adjusted the useCustomerListPresenter hook to include the company query, ensuring it is only enabled when the assign company modal is open.
- Enhanced the CustomersTable component to pass the company query to the modal content.
- Modified the layout of the SignIn component to improve responsiveness and visual appeal.
- Adjusted the container classes for better alignment and spacing across different screen sizes.
- Enhanced the validation of country codes in the TenderDetails component using a new utility function.
- Updated the useGetFlagQuery hook to include an options parameter for conditional fetching based on country code validity.
- Refined the rendering logic to ensure country flags are displayed only when valid data is available.
- Updated the TenderDetails component to validate country codes using a new utility function, isValidAlpha2CountryCode.
- Modified the useGetFlagQuery hook to accept an options parameter for conditional fetching based on the validity of the country code.
- Improved the rendering logic for the country flag to ensure it only displays when valid flag data is available.
- Changed import paths for the Loading component from "@/app/loading" to "@/components/loading" across multiple files to maintain consistency and improve modularity.
- Removed the Loading component definition from loading.tsx, simplifying the file structure.
- Moved the useIsMobile hook import to the correct position in conditional-layout.tsx.
- Added type="button" to the ThemeToggleSwitch button for better accessibility.
- Introduced truncateString utility in UserInfo component to limit email display length.
- Set Image component in UserInfo to unoptimized for performance improvement.
- Update MultiSelect component to allow items to be optional or null, improving flexibility.
- Implement safe handling of items to prevent errors when items are not provided.
- Add a message to display when no items are available, enhancing user experience.
- Refactor rendering logic for selected items to maintain consistent styling.
- Remove the NEXT_PUBLIC_API_URL from the production environment file.
- Change axios base URL to use a local proxy endpoint.
- Add rewrites in next.config.mjs to route API requests through the proxy.
- Add loading state to the submit button in SigninWithPassword component to prevent multiple submissions.
- Use utility function to conditionally apply styles based on the loading state, enhancing user experience.
- Add EmptyListWrapper to various tables (Admins, Companies, Customers, Feedback, Notification History, Tenders) to provide a consistent empty state message when no data is available.
- Update phone number and status display logic in the Profile page to handle null values gracefully.
- Introduce worktree setup configuration in worktrees.json for easier project setup.
- Log the response data on successful login for debugging purposes
- Improve error handling in user service by using safeParse for login response validation
- Update User schema to allow null values for optional fields, enhancing flexibility in user data handling
- Add global logout callback registration and retrieval functions in User context
- Integrate logout callback in response interceptor to handle 401 errors on token refresh
- Ensure fallback logout mechanism if callback is not registered, clearing cookies and redirecting to sign-in
- Extract MainLayout component from ConditionalLayout to reduce nesting and improve code organization
- Add useIsMobile hook to MainLayout for responsive behavior and prevent layout reflow on mobile
- Implement collapsed sidebar state for mobile devices showing only icons (70px width)
- Add MenuExpandIcon component to sidebar icons for collapsed state UI
- Update sidebar to display favicon instead of full logo when collapsed on mobile
- Remove menu toggle button and logo from header, consolidate in sidebar for better UX
- Improve sidebar styling with conditional padding and alignment for collapsed state
- Update sidebar navigation items to hide text labels when collapsed, showing only icons
- Refactor header component to remove mobile-specific logic now handled in MainLayout
- Enhance mobile navigation by maintaining sidebar space reservation to avoid layout reflow
- Upgrade next package from 15.1.6 to 15.1.9
- Upgrade eslint-config-next from 15.1.6 to 15.1.9
- Sort axios imports alphabetically in response-interceptor
- Skip token refresh for login endpoint to prevent infinite redirect loops
- Add check to prevent automatic token refresh when login request fails
- Add `required` to username, email, role, and type fields
- Make companies selection optional (remove validation)
- Require password only in create mode (`!editMode`)
- Switch language field from text `InputGroup` to `Select` with `Languages` options,
`GlobeIcon`, clearable support, and conditional disable/require for companies
- Remove manual length validation as Select ensures valid predefined values
- Update `Countries` values from ISO-2 to ISO-3 codes for consistency
- Remove isSubmitting prop from ChangeStatusForm component interface
- Remove isSubmitting parameter from ChangeStatusForm component destructuring
- Remove isChangingStatus variable from useChangeInquiryStatus hook
- Remove isSubmitting prop passed to ChangeStatusForm in InquiriesTable
- Remove isChangingStatus from presenter return object
- Simplify status change form by eliminating unused loading state management
- Remove custom EditIcon SVG component definition from inquiries table
- Import PencilSquareIcon from assets/icons instead of custom implementation
- Update change status button to use PencilSquareIcon component
- Improve code maintainability by using centralized icon library
- Format ListHeader component props for better readability
- Create ChangeStatusForm component with status, reason, and description fields
- Add change status modal to inquiries table with form integration
- Implement useChangeInquiryStatus hook integration in presenter
- Add edit icon button to trigger status change modal for each inquiry
- Update Status component to accept status prop for proper styling
- Update FormFooter component to support form submission handling
- Add isChangeStatusModalOpen state management to presenter
- Update TInquiries type definitions to include change status credentials
- Enhance inquiries list with status change workflow alongside existing delete functionality
- Add useChangeInquiryStatus hook for managing inquiry status mutations
- Add STATUS endpoint to inquiries API endpoints configuration
- Add changeInquiryStatus method to inquiries service with error handling
- Add TChangeInquiryStatusCredentials type with validation schema
- Include description, reason, and status fields in status change credentials
- Invalidate inquiries query cache on successful status update
- Display success toast notification after status change completes
- Import and integrate Pagination component into inquiries table
- Add allInquiries data exposure to access pagination metadata
- Expose setParams function to allow dynamic pagination updates
- Initialize default offset and limit parameters (10 items per page)
- Reset offset to 0 when applying new filters for consistent pagination
- Implement page change handler to update offset based on selected page
- Maintain filter state while navigating between pages
- Create new InquiriesListFilters component with search and status filter fields
- Integrate filter modal into inquiries table with form handling
- Add INQUIRY_STATUS enum with pending, reviewed, approved, and rejected statuses
- Implement URL-based query parameter management for filter persistence
- Add form state management using react-hook-form with watch and setValue utilities
- Connect filter search to useGetInquiries hook to fetch filtered results
- Support clearing individual filter fields and closing filter modal
- Add "Inquiries" nav item to sidebar data with `/inquiries` URL and BriefcaseTimer icon
- Implement BriefcaseTimer SVG icon component
- Add `INQUIRIES` base endpoint to API_ENDPOINTS
- Cleanup: remove commented details button in CmsTable, reorder imports
- Add delete button with trash icon to contact us table rows
- Implement confirmation modal for delete action
- Create useDeleteContactUs mutation hook with success callback
- Add deleteContactUs method to contact-us service
- Update API endpoints to support BASE() function for dynamic ID routing
- Add state management for modal open/close and current contact selection
- Integrate toast notifications for delete success feedback
- Add tooltip component to delete button for better UX
- Update query key to use BASE() endpoint for consistency
- Enable Contact Us navigation menu item in sidebar with visible flag set to true
- Create TContacts type schema with Zod validation for API responses
- Add type safety to contactUsService.getAllContactUs() with return type annotation
- Implement contact list table rendering with proper data mapping
- Display contact information columns: full name, email, status, phone, created date
- Add date formatting using unixToDate utility for created_at timestamps
- Update useContactUsListPresenter to return properly structured contacts data
- Refactor table columns array to include all contact detail fields
- Follows established pattern from recent filtering feature implementations
- Add ChangeEvent import for proper TypeScript typing
- Remove unused register function from useForm hook
- Refactor onChange handler with explicit ChangeEvent<HTMLSelectElement> type annotation
- Extract target value into variable for improved readability
- Ensure consistent form field updates between setValue and setCompanies calls
- Improve type safety and reduce potential runtime errors in form handling
- Remove unused FormErrorMessages import
- Add watch and setValue hooks from useForm for better form state management
- Implement useEffect to properly initialize company_ids field with default values
- Replace register-based validation with controlled component pattern
- Move onChange handler from register to Select component onChange prop
- Add selectedCompanyId state tracking using watch hook
- Change required validation from register config to component prop
- Improve form field synchronization between react-hook-form and component state
- Add default value of 0 for schedule_at field when not provided
- Restructure credentials object to explicitly set schedule_at before mutation
- Prevent undefined values from being sent to the API when schedule_at is empty
- Reorganize imports in alphabetical order for better maintainability
- Add value binding to role select field using watch hook for proper form state synchronization
- Add value binding to type select field using watch hook for consistent form behavior
- Ensure form fields properly reflect current values during editing and user interaction
- Create CmsListFilters component with search and key filter fields
- Add filter modal to CMS table with open/close functionality
- Implement useForm hook integration for filter form management
- Update useCmsTablePresenter to handle filter state and search logic
- Modify useGetCmsList query hook to accept and pass filter parameters
- Update cms-service.getCms method to support query parameters
- Add URL-based query string management for filter persistence
- Integrate filter button in ListHeader component
- Add isMutating state tracking for loading indicator during search
- Create CompanyCategoryListFilters component with search and published status filters
- Integrate ListHeader component to replace inline create button
- Add filter modal with form handling and submission logic
- Implement useForm hook for filter form state management
- Add search parameter synchronization with URL query params
- Support clearing individual filter fields and resetting filters
- Add loading state indicator during filter search operations
- Maintain consistency with existing filtering patterns used in companies and tenders tables
- Create CompanyListFilters component with form fields for name, email, phone, currency, and employee count
- Integrate filter modal into CompaniesTable component with open/close state management
- Update useCompanyListPresenter hook to handle filter form state and search parameters
- Replace inline create button with ListHeader component for consistent UI patterns
- Add support for URL-based query parameters to persist filter state
- Implement form reset and filter clearing functionality
- Add isMutating state tracking for loading indicators during filter searches
- Update constants/enums to support currency filtering optionsfor
- Create new CustomerListFilters component with status, role, and type filter options
- Integrate filter modal into customer list table with open/close functionality
- Add filter form handling with react-hook-form for managing filter state
- Implement search functionality triggered by filter form submission
- Add EmptyListWrapper component to display message when no customers found
- Replace inline create button with reusable ListHeader component
- Add clearable select fields for better filter UX
- Update customer table to safely handle optional customer properties
- Add new CustomerStatus and CustomerType enums to support filtering options
- Improve table organization with proper imports and component structure
- Create new TenderListFilters component with title, status, and country code filter fields
- Add filter modal to TendersTable component with open/close state management
- Implement useForm hook in useTenderListPresenter for filter form handling
- Add ListHeader component with filter button to tender table
- Replace debounced search with URL search params-based filtering
- Integrate filter form submission with tender query parameters
- Add isMutating state tracking for loading indicator during filter operations
- Remove deprecated useDebounce hook and search state from presenter
- Improve filter UX with modal dialog and clear button functionality
Implement sanitizeHtmlWithStyles utility to safely render HTML content in notification messages while removing dangerous tags and attributes. Update NotificationDetailsCard to use dangerouslySetInnerHTML with sanitization for message display.
Added defensive programming by adding null checks for document object before accessing its properties and methods across multiple components (MultiSelect, ConfirmationModal, Dropdown, Modal). Also implemented lazy initialization for Firebase messaging to prevent SSR-related errors and ensure messaging is only initialized on the client side. These changes improve server-side rendering compatibility and prevent potential runtime errors.
- Commented out the "Contact Us" navigation item in sidebar data
- Removed unused navigation entry to clean up sidebar configuration
- Maintains existing navigation structure while reducing clutter
- Add support for initial data in all marketing wizard step components
- Update step presenters to accept and handle initial data
- Modify forwardRef implementations to include initialData prop
- Add TypeScript interfaces for step component props
- Improve type safety and data handling across marketing wizard steps
- Prepare components for edit and create workflows with consistent data management
- Implement CMS table with row listing and pagination
- Add delete functionality for CMS entries with confirmation modal
- Introduce edit button to navigate to edit page for specific CMS entry
- Update page type form to include new 'key' field for CMS entries
- Modify CMS service and types to support new data structure
- Enhance table presenter with additional actions and state management
Resolves data management and user interaction improvements for CMS module
- Move all marketing wizard components from `create/_components` to `_components` directory
- Update import paths in `create/page.tsx` to reflect new component locations
- Add countries constant to support country selection in page type configuration
- Minor formatting and cleanup of `.vscode/settings.json`
- Prepare for more modular and consistent component structure in marketing wizard
- Implement new edit marketing page with dynamic routing
- Update CMS and contact us table components with placeholder content
- Add new query hook for fetching CMS details by ID
- Modify CMS service to support fetching individual CMS details
- Update type definitions for CMS-related data structures
- Add initial breadcrumb navigation for edit marketing page
- Prepare infrastructure for future CMS editing functionality