Commit Graph

225 Commits

Author SHA1 Message Date
AmirReza Jamali 7755384d51 fix(auth): enhance user login response handling and update User schema
- 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
2026-02-10 16:49:19 +03:30
AmirReza Jamali cb6a48a6e6 Added docker ignore, change next.js config, update next js version 2026-02-08 13:10:48 +03:30
AmirReza Jamali cafd7568e0 feat(auth): implement global logout callback for API interceptors
- 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
2026-01-25 14:52:04 +03:30
AmirReza Jamali 3080a5fe6d fix(api): update ASSIGN_COMPANY_TO_CUSTOMER endpoint to remove redundant 'assign' path segment 2025-12-14 10:19:00 +03:30
AmirReza Jamali 4cc7684b1f refactor(layouts): extract MainLayout component and improve sidebar mobile UX
- 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
2025-12-08 17:07:54 +03:30
AmirReza Jamali 13d736e9f0 chore(deps): upgrade Next.js to 15.1.9
- 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
2025-12-08 16:35:42 +03:30
AmirReza Jamali 918c562cfc feat(customers): update required validations in CreateCustomer form
- Add `required` to username, email, role, and type fields
- Make companies selection optional (remove validation)
- Require password only in create mode (`!editMode`)
2025-11-30 09:56:09 +03:30
AmirReza Jamali fa6ffc59aa feat(marketing): replace language input with Select; update Countries to ISO-3
- 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
2025-11-29 15:19:20 +03:30
a.jamali f38498229d Update .env.production 2025-11-29 11:10:13 +03:30
AmirReza Jamali 05e4346b1b refactor(inquiries): Remove unused isSubmitting state from status change
- 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
2025-11-25 15:47:40 +03:30
AmirReza Jamali 864c588f8a feat(inquiries): Replace custom EditIcon with PencilSquareIcon component
- 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
2025-11-25 15:06:18 +03:30
AmirReza Jamali 2ec752df0c feat(inquiries): Add change status functionality to inquiries
- 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
2025-11-25 14:53:16 +03:30
AmirReza Jamali 6da653cb15 feat(inquiries): Add status change functionality to inquiries
- 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
2025-11-25 14:11:00 +03:30
AmirReza Jamali 8b795bb428 feat(inquiries): Add pagination functionality to inquiries list table
- 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
2025-11-25 13:54:40 +03:30
AmirReza Jamali a77bb6cccc feat(inquiries): Add filtering functionality to inquiries list table
- 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
2025-11-25 12:40:30 +03:30
AmirReza Jamali 6d4016af5e feat(inquiries): add sidebar nav item, icon, and API endpoint
- 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
2025-11-25 12:03:12 +03:30
AmirReza Jamali 2389ad1bbf feat(contact-us): Add delete functionality to contact us table
- 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
2025-11-23 13:33:07 +03:30
AmirReza Jamali a8d95d5f92 feat(contact-us): Add filtering functionality to contact us list table
- 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
2025-11-23 13:17:00 +03:30
AmirReza Jamali cf3a931cef fix(customers): improve type safety in assign to company modal
- 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
2025-11-23 11:40:40 +03:30
AmirReza Jamali 88807b6b42 fix(customers): improve form field binding in assign to company modal
- 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
2025-11-23 11:16:32 +03:30
AmirReza Jamali b9b05b438a fix(notifications): ensure schedule_at field has default value on submit
- 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
2025-11-23 11:10:25 +03:30
AmirReza Jamali a348124d50 fix(customers): improve form field value binding and import organization
- 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
2025-11-23 11:06:39 +03:30
Sina Nakhostin f8b9fac8e0 Merge pull request 'feat(cms): Add filtering functionality to CMS list table' (#51) from table-filter into develop
Reviewed-on: https://repo.ravanertebat.com/TM/tm_panel/pulls/51
Reviewed-by: Sina Nakhostin <s.nakhostin@ravanertebat.com>
2025-11-23 10:58:44 +03:30
AmirReza Jamali 410ca5a737 feat(cms): Add filtering functionality to CMS list table
- 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
2025-11-23 10:51:55 +03:30
Sina Nakhostin 12017dc746 Merge pull request 'table-filter' (#50) from table-filter into develop
Reviewed-on: https://repo.ravanertebat.com/TM/tm_panel/pulls/50
Reviewed-by: Sina Nakhostin <s.nakhostin@ravanertebat.com>
2025-11-22 16:39:17 +03:30
AmirReza Jamali e13527fe81 feat(company-categories): Add filtering functionality to category list table
- 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
2025-11-22 15:54:31 +03:30
AmirReza Jamali 62981e83e9 feat(companies): Add filtering functionality to company list table
- 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
2025-11-22 15:48:34 +03:30
AmirReza Jamali 7005ab67b7 feat(customers): Add filtering functionality to customer list table
- 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
2025-11-22 15:22:44 +03:30
AmirReza Jamali 1407d93704 feat(tenders): Add filtering functionality to tender list table
- 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
2025-11-22 15:14:19 +03:30
AmirReza Jamali 62f3b49ed4 feat: add HTML sanitization for notification messages
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.
2025-11-15 13:28:30 +03:30
Sina Nakhostin f960d79307 Merge pull request 'fix: add null checks for document and firebase messaging to prevent SSR errors' (#49) from table-filter into develop
Reviewed-on: https://repo.ravanertebat.com/TM/tm_panel/pulls/49
Reviewed-by: Sina Nakhostin <s.nakhostin@ravanertebat.com>
2025-11-15 12:32:34 +03:30
AmirReza Jamali 1d1027fab4 fix: add null checks for document and firebase messaging to prevent SSR errors
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.
2025-11-15 12:22:30 +03:30
Sina Nakhostin 04a8d4634a Merge pull request 'fixing build issue' (#48) from table-filter into develop
Reviewed-on: https://repo.ravanertebat.com/TM/tm_panel/pulls/48
Reviewed-by: Sina Nakhostin <s.nakhostin@ravanertebat.com>
2025-11-15 10:32:56 +03:30
AmirReza Jamali 5e60a292f5 fixing build issue 2025-11-15 10:31:05 +03:30
Sina Nakhostin 940cf3f8ae Merge pull request 'refactor(marketing): Update form field names to use snake_case for consistency' (#47) from table-filter into develop
Reviewed-on: https://repo.ravanertebat.com/TM/tm_panel/pulls/47
Reviewed-by: Sina Nakhostin <s.nakhostin@ravanertebat.com>
2025-11-11 13:54:40 +03:30
AmirReza Jamali 6bd44e78a0 refactor(marketing): Update form field names to use snake_case for consistency 2025-11-11 13:00:50 +03:30
Sina Nakhostin db1ccab2f1 Merge pull request 'table-filter' (#46) from table-filter into develop
Reviewed-on: https://repo.ravanertebat.com/TM/tm_panel/pulls/46
Reviewed-by: Sina Nakhostin <s.nakhostin@ravanertebat.com>
2025-11-11 11:55:22 +03:30
AmirReza Jamali e75932d249 refactor(sidebar): Remove commented out Contact Us navigation item
- 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
2025-11-11 10:52:45 +03:30
AmirReza Jamali bd79b7ed14 refactor(marketing): Standardize marketing wizard steps with initial data support
- 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
2025-11-11 10:43:32 +03:30
AmirReza Jamali b444f6a08f feat(cms): Add CMS table with delete and edit functionality
- 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
2025-11-11 10:12:21 +03:30
AmirReza Jamali 2b9eaa0495 refactor(marketing): Restructure marketing wizard components and improve project organization
- 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
2025-11-10 12:41:41 +03:30
AmirReza Jamali b8169fbcd9 Add section validations 2025-11-10 09:58:27 +03:30
AmirReza Jamali 5640febf40 feat(cms): Add CMS details page and update related components
- 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
2025-11-10 09:53:22 +03:30
AmirReza Jamali ed18d86960 feat(marketing): Add page type configuration and validation for marketing wizard
- Add page type selection (company or organization) with dynamic form fields
- Implement conditional validation for company-specific fields (language, company name, country)
- Update HeroStep with URL pattern validation for GIF file input
- Modify page submission to include page type and related configuration data
- Enhance form handling with react-hook-form for page type configuration
- Add input groups and select components for page type configuration section
2025-11-09 17:01:52 +03:30
AmirReza Jamali 4f7b258533 refactor(marketing): Standardize step components and data structure
- Rename field names across step components for consistency
- Update chart step to use more generic data structure
- Modify input field names to follow consistent naming convention
- Refactor chart step to use key-value pairs instead of x-y coordinates
- Update form field names in multiple marketing wizard steps
- Improve type consistency and naming across marketing wizard components
2025-11-09 16:04:52 +03:30
AmirReza Jamali 574a3a20ce refactor(marketing): Standardize step components with forwardRef and data collection
- Add forwardRef to all marketing wizard step components
- Implement useImperativeHandle for consistent data collection across steps
- Remove redundant collectData static methods
- Add displayName to each component for better debugging
- Simplify data retrieval pattern using ref-based getData method
- Remove duplicate code and improve component consistency
- Ensure each step component follows the same structural pattern
2025-11-09 15:02:26 +03:30
AmirReza Jamali cdc8cde6a4 feat(marketing): Refactor marketing wizard steps and add data collection methods
- Moved all marketing wizard step components to `create/_components` directory
- Added `collectData` static method to each step component for data retrieval
- Reorganized file structure to improve component modularity
- Prepared steps for dynamic data collection in wizard workflow
- Added VSCode settings file for project configuration
- Introduced new CMS-related components and services
- Updated API endpoints and added new query hooks
2025-11-09 14:53:36 +03:30
AmirReza Jamali f9bd7fce4b feat(marketing): add footer step with form inputs for email, phone, address, tagline, and copyright 2025-11-05 16:16:53 +03:30
AmirReza Jamali c2a14953d0 feat(marketing): add contacts section and improve checkbox UI
This commit introduces a new "Contacts" section to the marketing page, which is now the fifth step in the page's flow.

Additionally, the Checkbox component has been enhanced with a smooth transition effect on state change. This provides better visual feedback and a more polished user experience.
2025-11-05 15:39:16 +03:30
AmirReza Jamali ad93236594 feat(stepper): add scroll to top on step change
When navigating between steps, the new content could appear below the fold, requiring the user to scroll up manually.

This change introduces an automatic smooth scroll to the top of the page whenever the user navigates to the next or previous step. This improves the user experience by ensuring the start of the new step's content is always visible.
2025-11-05 12:47:53 +03:30