You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
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;
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.
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.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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
Приложенный файл:label.Project editor and profile
Auth and expert filter
novalidatewhile preserving Angular validation, preventing native validation UI from colliding with platform errors;Program analytics
Project region
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.
organizationNameremains 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:
organizationNamevalues;Verification
npm run test:ci: 1068/1068 passed across 336 files;npm run lint:ts: passed with 0 errors (6 pre-existing warnings);npm run build:prod: passed (existing budget/Sass/CommonJS warnings only);git diff --check: passed.Scope confirmation