Commit Graph

148 Commits

Author SHA1 Message Date
mihretue
e97e12d979 Merge remote-tracking branch 'origin/certficate' into feature/exam-attempt-domain 2026-08-17 11:19:17 +00:00
mihretue
4a7d36369f fix(exam): print real MCQ options, evaluation-method-aware cutting point check
Print showed blank A/B/C/D fill-in lines for every CHOICE question instead
of the real options — the detail page never fetched option data at all
(GET /exams/:id?i=questions, no nested options), and the print template
hardcoded the blanks regardless. Now requests
?i=questions,questions.options and prints the real option text, falling
back to blank lines only when a question genuinely has none on record.

Also fixed the print-time cutting-point guard: it compared raw point sum
to cutting point regardless of evaluationMethod, wrongly blocking valid
low-point-sum PERCENTAGE papers from printing. Now branches the same way
RecordResultModal's grading preview already does, and surfaces the
matching backend validation error (paper_cannot_reach_cutting_point) added
server-side for the same reason.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-17 09:43:09 +00:00
mihretue
4f692c6bcf fix(exam): stop Create/Update Exam form from silently failing to submit
Three bugs compounded into a button that looked unwired:

- cuttingPoint carried a native HTML required attribute while sitting on
  the hidden Settings tab (Mantine keeps inactive tab panels mounted with
  display:none). The browser blocked form submission entirely, silently
  - no toast, no error, nothing. Replaced required with withAsterisk and
  moved validation into JS.
- Manual required-field validation never checked type/form/adminMethod/
  evalMethod/cuttingPoint at all, so even without the native block above
  a half-filled Settings tab would silently no-op. Validation now covers
  every required field on both tabs and switches to whichever tab has
  the problem.
- Filling only the English Direction field (leaving Amharic blank) passed
  frontend validation but the backend hard-rejects it, producing a 400
  with a confusing error. Frontend now requires both-or-neither, matching
  the same rule already applied to MCQ options.

Also translates the previously hardcoded validation message in both
locales.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-17 08:48:32 +00:00
mihretue
84ff644ebb fix(question): show both language fields for MCQ options
Options editor used a single toggle-based bilingual field (BilingualInput)
that swapped English/Amharic in place via a tiny, easy-to-miss button.
Authors were filling English only and never noticing Amharic was empty.

- QuestionOptionsEditor: show separate always-visible English/Amharic
  TextInputs per option instead of the toggle field.
- BilingualInput (shared): for other callers still using the toggle,
  add a tooltip and a red dot indicator when the hidden language is
  empty, so the gap is visible without switching.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-17 08:26:21 +00:00
nati14575
c698f381b9 fix(api): update BASE_API_URL to use localhost:3000 for consistency 2026-08-17 09:58:51 +03:00
fitse-yotor
fa7eb3dc5f feat(backoffice): restore Mengestab's seafarer register and wire it up
The approved single-page register -- with the detail modal that shows a
seafarer's full standing -- had been replaced by a three-file grid that
carried no profile view. That is why the seafarer profile appeared
missing from the backoffice entirely.

Restores his page and points it at /seafarer-registry. The list is
served whole and filtered in the browser: the filters are instant facets
over a page-sized list, and a round trip per keystroke would make the
search feel slower than the data it searches.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-17 07:15:08 +03:00
fitse-yotor
f294f67ced fix(portal,backoffice): six reported issues in registration and the designer
Seafarer and vessel registration were filtered out of the operations
step by `requiresOperatorMode !== false`, so someone registering as a
seafarer or vessel owner landed on an onboarding screen that did not
describe them. Both now appear, grouped apart from the company modes:
declaring "I am a seafarer" is a different kind of statement from "my
company forwards freight".

The designer's preview was gated on the Handlebars source alone, which a
canvas layout does not have until the server compiles it on save -- so
the button was dead for exactly the designs the canvas exists for.

Editing looked broken rather than deliberately read-only: every seeded
template is PUBLISHED, and a published design is immutable because
certificates were issued from it. Says so, and offers the new-version
action that is the way forward.

Reviewing officers saw company, capital and staff tabs on seafarer
certificate applications, because PRESENTATION is keyed by the generic
licence keys and the fifty-odd rank-specific CoC/CoP keys fell through
to the company default. Matched by prefix instead, so a certificate
configured tomorrow gets the right presentation without a code change.

Seaman book and BTC are wired to the newly seeded licence types and no
longer marked "soon".

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-16 22:21:00 +03:00
fitse-yotor
c58a727a96 Merge branch 'feature/seaman' of https://github.com/Tria-plc/emaui into certficate 2026-08-15 12:44:39 +03:00
fitse-yotor
0ac75669d4 feat: add ExamStageActions component for exam fee handling
- Implemented ExamStageActions component to manage actions related to exam booking and payment based on application status.
- Added mock-base-query for development, providing a partial mock backend for various API endpoints.
- Introduced mock-data for simulating responses in the mock-base-query, covering profiles, vessels, applications, licenses, exams, and notifications.
2026-08-15 11:51:14 +03:00
estifanos
e0b3a4887a feat: add internationalization support for auth components and pages, including translations for Amharic and English 2026-08-14 07:54:30 +00:00
estifanos
d6b813b697 feat: add landing page copy and styles for English and Amharic versions
- Introduced `landing-copy.ts` containing text for the public landing page, supporting both English and Amharic languages.
- Added `landing.css` for styling the landing page, ensuring scoped styles to prevent conflicts with other app styles.
- Implemented smooth scrolling and animations for a better user experience.
2026-08-14 07:20:42 +00:00
mihretue
14b5bb83f9 feat(question): MCQ options authoring editor (Phase 2 domain foundation)
Backend now supports MCQ options + a separate answer-key table
(PUT /questions/:id/options). Frontend side of that, authoring only —
no candidate exam-taking UI.

- Question type gains options?: QuestionOption[] (no correctness field —
  the API never returns one, matching the backend's split-table design)
- New question-api hooks: getQuestionWithOptions, setQuestionOptions
- New QuestionOptionsEditor component (separate file, not inlined into
  QuestionPage) — add/remove/reorder options, mark correct, bilingual text
- Wired into the question edit form, shown only for an existing CHOICE
  question (options attach to an id, matching the backend's replace
  endpoint)
- en/am i18n strings for the new editor

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-13 19:28:03 +00:00
mihretue
d98d6a71fe fix(result): gate record/save buttons behind RECORD_EXAM_RESULT
Record Result (POST /results) and the detail-modal Save (PUT /results/:id)
had no RequirePermission gate, unlike every other action on this page —
both routes are backend-guarded (RECORD_EXAM_RESULT, or
RECORD_EXAM_RESULT|MODERATE_EXAM_RESULT for the update), the buttons just
never mirrored it client-side.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-13 17:17:14 +00:00
Nati
6852fc86c6 feat: implement permission-based access control across various pages and components
- Added RequirePermission component to manage access based on user permissions.
- Integrated permission checks in MySeaRecordsPage, SeafarerRegistrationPage, VesselRegistrationPage, WaiverPage, and PortalLayout.
- Updated router to enforce permissions for specific routes.
- Introduced PORTAL_PERMISSIONS and LICENSE_PERMISSIONS constants for consistent permission management.
- Enhanced usePermissions hook to fetch permissions from the server and determine access rights.
- Refactored UI components to conditionally render based on user permissions, improving security and user experience.
2026-08-13 12:58:11 +00:00
Nati
220ed2d018 Merge branch 'dev' of github.com:Tria-plc/emaui into Refactor
Resolved by unifying on the lib/data AdvancedTable (PR #10) as the canonical
table component: kept its API plus teammate i18n/feature work, kept the
folder-per-table structure (index.tsx + columns.tsx + actions.tsx) across all
27 tables, removed the parallel lib/table implementation, and fixed
pre-existing compile breaks in ExamDetailPage/QuestionAssigner/RecordResultModal.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-13 11:31:27 +00:00
Nati
2af9e60800 feat(vessel-registration): add vessel registration page with incident reporting and certificate download functionality
feat(waiver): implement waiver page with application tracking and letter download feature

feat(ui): introduce AdvancedTable component for enhanced table functionality across the application

chore: update package-lock.json to remove unnecessary dependencies
2026-08-13 09:11:50 +00:00
estifanos
2fa55965e1 feat: enhance internationalization support across various components and pages 2026-08-12 12:30:22 +00:00
estifanos
31c52c02e0 feat: introduce useLocalized hook for bilingual value retrieval.(localization round 2)
- Added useLocalized hook to provide a stable function for retrieving bilingual values based on the current language.
- Updated various components across the portal and backoffice to utilize the new useLocalized hook for consistent bilingual label rendering.
- Refactored localized function in licensing.helpers to handle empty Amharic strings correctly.
- Enhanced localization handling in LicenseApplicationPage, ProfilePage, and other components to ensure proper language switching.
2026-08-12 11:31:20 +00:00
Estifo77
faf58850f0 UI fixes 2026-08-12 14:17:29 +03:00
estifanos
8f2dcb30f0 feat: add internationalization support for seafarer registry
- Integrated i18n for seafarer registry page, including translations for various UI elements and statuses.
- Updated SeafarerDetailDrawer and StatusModal components to utilize translation hooks.
- Enhanced user feedback messages for status updates and errors.
- Added new translations for Amharic and English locales, covering seafarer statuses, drawer labels, modal content, and table headers.
localization for backoffice
2026-08-12 10:55:14 +00:00
estifanos
9897a9bf78 feat: implement date display utility across various pages
- Added `useDateDisplayer` hook and `dateDisplayer` function to format dates consistently based on the user's language.
- Updated multiple components and pages in both backoffice and portal applications to utilize the new date display functionality, ensuring proper formatting for dates in lists, tables, and detail views.
- Introduced Ethiopian date formatting for Amharic language support.
- Refactored date handling in components such as ExamAppealsPage, ResultPage, SeafarerRegistryPage, and others to improve localization and user experience.
2026-08-12 10:22:39 +00:00
Estifo77
33935419fb cookie clearting fix 2026-08-12 12:34:09 +03:00
estifanos
7c9f78c680 feat: replace Paper with Modal in CertificationPage, ConfigurationPage, ExamPage, and QuestionPage for consistent UI 2026-08-12 07:55:43 +00:00
estifanos
362e6d88b4 feat: enhance PaymentConfigPage with refetch and loading state for license types 2026-08-12 07:37:19 +00:00
estifanos
bbb23f3bbf feat: replace Table with AdvancedTable for improved license type management in PaymentConfigPage 2026-08-12 07:35:43 +00:00
estifanos
0633ecc165 feat: implement applicant name fallback logic in licensing helpers and update MyApplicationsPage 2026-08-12 07:18:43 +00:00
estifanos
7c3a25245f UI fixes 2026-08-11 11:48:09 +00:00
estifanos
1b0a21c683 feat: add page size selection to AdvancedTable and update useServerTable hook 2026-08-11 11:37:52 +00:00
Estifo77
0573e01769 UI fixes 2026-08-11 14:32:26 +03:00
estifanos
0fd78c7757 fix: update Badge component in LicenseQueuePage for consistent styling
feat: add siblings and boundaries props to pagination in AdvancedTable
2026-08-11 11:23:38 +00:00
estifanos
01899c0593 feat: implement endorsement types and update navigation for endorsement processing 2026-08-11 10:50:37 +00:00
estifanos
6b946f0149 feat: update applicant name handling for license types without company name 2026-08-11 08:42:32 +00:00
estifanos
71c55e8da8 feat: implement vessel ownership transfer feature with navigation updates and localization 2026-08-11 08:18:40 +00:00
estifanos
ce802af366 feat: add vessel registration application queue to navigation and localization 2026-08-11 08:13:35 +00:00
estifanos
3d5b9db442 feat(i18n): update CoC and CoP queue labels in English and Amharic translations 2026-08-10 11:50:44 +00:00
Estifo77
4fc73b0567 feat(i18n): update medical verification label to include sea service verification
fix(layouts): import baseApi in BackofficeLayout and PortalLayout for API state management

refactor(auth): remove clearCurrentProfile call on logout and improve cookie removal logic

chore(auth-storage): enhance cookie management with secure and sameSite attributes, and streamline cleanup process
2026-08-10 14:42:21 +03:00
estifanos
1997434028 Add applicant name handling for SEAFARER_REGISTRATION and update translations 2026-08-10 11:09:29 +00:00
estifanos
6b7c40cd3f Add SEAFARER_REGISTRATION type and update translations and navigation 2026-08-10 10:59:14 +00:00
estifanos
2c1b0306a0 revert 2026-08-10 10:21:58 +00:00
estifanos
73de3f212b Licence applications filter 2026-08-10 10:10:34 +00:00
Estifo77
c822e99052 Add AttachmentsModal and refactor MedicalVerificationPage with AdvancedTable integration 2026-08-10 13:06:54 +03:00
estifanos
0f7c1dba4b fixes 2026-08-08 07:22:36 +00:00
estifanos
b98c2b274d Revert "Add translations for CoP queue and update existing CoC queue labels"
This reverts commit 52d2747f7a.
2026-08-08 07:04:03 +00:00
estifanos
52d2747f7a Add translations for CoP queue and update existing CoC queue labels 2026-08-08 06:54:05 +00:00
estifanos
44786a2f6f fixes 2026-08-08 06:36:48 +00:00
estifanos
70b6562045 fixes 2026-08-08 06:32:03 +00:00
estifanos
c006644166 Add review status column and enhance action buttons in ResultPage 2026-08-08 06:29:28 +00:00
Estifo77
23675005fc Refactor imports and improve LoginPage validation logic 2026-08-08 09:26:47 +03:00
Estifo77
203d2e5026 Merge branch 'dev' of https://github.com/Tria-plc/emaui into estif-branch-1 2026-08-08 09:03:50 +03:00
Mulu Mehari
7c968c7093 Adding more functionalities for all the license types 2026-08-07 11:50:07 +03:00