Skip to content

DEV: polish platform UI analytics and region selection - #319

Merged
TThanos3000 merged 2 commits into
devfrom
fix/dev-ui-analytics-region-polish
Sep 2, 2026
Merged

DEV: polish platform UI analytics and region selection#319
TThanos3000 merged 2 commits into
devfrom
fix/dev-ui-analytics-region-polish

Conversation

@TThanos3000

Copy link
Copy Markdown
Contributor

Summary

Angular DEV follow-up after PR #318. This PR improves the remaining vacancy, profile, auth, expert-filter, analytics, and project-region UX without changing backend or API contracts.

Vacancies and responses

  • makes skill tags readable and consistent across catalog, detail, responses, and project vacancy management;
  • increases the catalog response-management CTA hit area;
  • improves vacancy description contrast;
  • moves the response date into the right side of the candidate header with responsive wrapping;
  • normalizes response-card typography and retains the Приложенный файл: label.

Project editor and profile

  • improves vacancy skill and status chips in the project editor;
  • makes profile program and project names readable with two-line clamps;
  • fixes contact-link FormArray rendering so a newly added input appears immediately.

Auth and expert filter

  • adds novalidate while preserving Angular validation, preventing native validation UI from colliding with platform errors;
  • reserves separate space for browser/password-manager adornments and keeps the platform password eye clickable;
  • improves the contrast of expert case-filter headings, values, options, placeholders, and checkboxes.

Program analytics

  • redesigns the unavailable case-statistics state as a compact, readable empty state;
  • removes the duplicated activity-period subtitle in the zero state;
  • aligns analytics title, subtitle, metric, evaluation-row, metadata, and assignment-card hierarchy;
  • improves meaningful text contrast without changing calculations or API data.

Project region

  • replaces free-text entry for new values with an accessible searchable canonical selector;
  • submits the selected region through the existing string contract;
  • normalizes only case and surrounding whitespace;
  • preserves an unknown legacy region when an existing project is opened or saved, and asks the user to select a canonical replacement;
  • does not perform fuzzy matching, so typos are never silently converted.

The canonical list follows the current official list of Russian federal subjects in Constitution Article 65: https://ips.pravo.gov.ru/api/ips/legislation/document?baseid=None&hash=c9693d70b5bc11c97f515e288930b34815497eab8f08a7ad32eaab319b6d262a

Historical noncanonical values remain visible in analytics. Fully cleaning values such as moscow, Миксва, Россия, or arbitrary text requires a separate reviewed backend data migration; this PR intentionally prevents new arbitrary values without hiding or deleting existing data.

Educational organization audit

No authoritative educational-organization catalog, model, API, or reference dataset exists in the Angular repository. organizationName remains a free-text compatibility field used across profile education, onboarding/profile flows, public display, and CV/export-related data. A frontend-only hardcoded university list was therefore not introduced.

A separate backend proposal should cover universities, colleges, and schools with:

  • an authoritative catalog and stable identifiers;
  • a read-only paginated search endpoint;
  • continued support for legacy organizationName values;
  • exact-match-only backfill where safe, preserving unknown values for user confirmation.

Verification

  • targeted tests: 65/65 passed across 14 files;
  • full npm run test:ci: 1068/1068 passed across 336 files;
  • npm run lint:ts: passed with 0 errors (6 pre-existing warnings);
  • scoped Prettier: passed;
  • scoped Stylelint: passed;
  • npm run build:prod: passed (existing budget/Sass/CommonJS warnings only);
  • git diff --check: passed.

Scope confirmation

  • React was not changed;
  • backend and API contracts were not changed;
  • workflows, Docker, and deploy configuration were not changed;
  • no merge or deploy is performed by this PR.

@TThanos3000

Copy link
Copy Markdown
Contributor Author

Region selector follow-up

Fixed the committed-value/search-query correctness issue without changing the region API contract:

  • canonical selection and search query are now separate states;
  • typing a different query clears the previously committed canonical value and propagates an empty form value until an option is selected;
  • starting replacement search for an unknown legacy value clears the hidden legacy form value;
  • untouched legacy values remain preserved on open, focus, blur, or Escape;
  • arbitrary search text is never committed;
  • result ranking is deterministic: exact normalized match, prefix match, then substring match; ties use shorter names first and Russian alphabetical order;
  • моск now lists and selects Москва before Московская область.

Verification after the follow-up:

  • region/project-form targeted tests: 26/26 passed across 5 files;
  • full npm run test:ci: 1074/1074 passed across 336 files;
  • npm run lint:ts: passed with 0 errors (6 pre-existing warnings);
  • scoped Prettier: passed;
  • scoped Stylelint: passed;
  • npm run build:prod: passed with existing warnings only;
  • git diff --check: passed.

Backend, React, API contracts, workflows, Docker, and deploy were not changed.

@TThanos3000
TThanos3000 marked this pull request as ready for review September 2, 2026 09:16
@TThanos3000
TThanos3000 merged commit 6c6493b into dev Sep 2, 2026
@TThanos3000
TThanos3000 deleted the fix/dev-ui-analytics-region-polish branch September 2, 2026 09:16
@TThanos3000

Copy link
Copy Markdown
Contributor Author

Formatting follow-up completed in commit 1f05e51ee68bafa7f145345c4fee1a3ba9d0237d and pushed to fix/dev-ui-analytics-region-polish.

Only these two files were changed by Prettier:

  • project-main-step.component.spec.ts — wrapping of two expect(...).toHaveLength(...) expressions;
  • region-select.component.html — wrapping of long attributes, the clear button, and legacy-value text.

There are no semantic changes. In a clean LF checkout matching CI, npm run format:check passes; git diff --check passes; npm run lint:ts passes with 0 errors and 6 pre-existing warnings.

Important: PR #319 was merged as 6c6493b5da40b41ab2583c1bfcd26b6114e56fd6 before this follow-up was pushed, so commit 1f05e51e is present on the restored source branch but is not part of the merged PR. No new PR, merge, or deploy was performed.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant