From c56a731a760a17ee393a865d0e6e32a513a91b10 Mon Sep 17 00:00:00 2001 From: DarKylX Date: Sat, 17 Oct 2026 19:11:57 +0300 Subject: [PATCH] feat(program): edit image framing and mobile cover in organizer preview --- .../image-framing-20261017.md | 93 +++++++++++ .../image-framing-20261017/browser-qa.json | 64 +++++++ .../image-framing-20261017/desktop.png | Bin 0 -> 121879 bytes .../image-framing-20261017/mobile.png | Bin 0 -> 64360 bytes .../program/program-image-framing.model.ts | 9 + .../program/program-management.model.ts | 6 +- .../src/app/domain/program/program.model.ts | 4 + .../program-sidebar-card.component.html | 6 +- .../program-card/program-card.component.html | 12 +- .../branding-preview.component.html | 158 ++++++++++++++++-- .../branding-preview.component.scss | 78 ++++++++- .../branding-preview.component.spec.ts | 91 +++++++++- .../branding-preview.component.ts | 138 ++++++++++++++- .../management/management.component.html | 11 +- .../management/management.component.spec.ts | 73 ++++++++ .../management/management.component.ts | 45 ++++- .../primitives/avatar/avatar.component.html | 65 +++++-- .../primitives/avatar/avatar.component.scss | 4 + .../ui/primitives/avatar/avatar.component.ts | 7 +- .../ui/widgets/detail/detail.component.html | 21 ++- .../ui/widgets/detail/detail.component.scss | 7 + .../app/ui/widgets/detail/detail.component.ts | 14 +- .../src/app/utils/program-branding.ts | 18 ++ .../primitives/avatar/avatar.component.html | 32 +++- .../primitives/avatar/avatar.component.scss | 24 +++ .../avatar/avatar.component.spec.ts | 20 +++ .../primitives/avatar/avatar.component.ts | 4 + .../image-framing.directive.spec.ts | 32 ++++ .../image-framing/image-framing.directive.ts | 33 ++++ .../ui/src/lib/components/primitives/index.ts | 1 + 30 files changed, 1005 insertions(+), 65 deletions(-) create mode 100644 docs/qa/program-management-v1/image-framing-20261017.md create mode 100644 docs/qa/program-management-v1/image-framing-20261017/browser-qa.json create mode 100644 docs/qa/program-management-v1/image-framing-20261017/desktop.png create mode 100644 docs/qa/program-management-v1/image-framing-20261017/mobile.png create mode 100644 projects/social_platform/src/app/domain/program/program-image-framing.model.ts create mode 100644 projects/ui/src/lib/components/primitives/image-framing/image-framing.directive.spec.ts create mode 100644 projects/ui/src/lib/components/primitives/image-framing/image-framing.directive.ts diff --git a/docs/qa/program-management-v1/image-framing-20261017.md b/docs/qa/program-management-v1/image-framing-20261017.md new file mode 100644 index 000000000..f68446157 --- /dev/null +++ b/docs/qa/program-management-v1/image-framing-20261017.md @@ -0,0 +1,93 @@ + + +# Настройка кадра программы и мобильная обложка + +## Current / target + +Организатор уже видит draft шапки и логотипа в preview desktop/mobile. Сейчас оба +режима используют один cover, object-fit cover/center; кадр и масштаб не редактируются. +Новый запрос напрямую расширяет существующий preview: изображение внутри кадра +можно двигать и масштабировать, мобильной обложке нужен отдельный файл. + +Сохраняем Mont, DS buttons/fields, существующую форму и preview. Под переключателем +экрана — выбор «Обложка / Логотип», ползунок «Масштаб», кнопки точного сдвига и +«Сбросить кадр». Выбранное изображение можно перетаскивать мышью/пальцем и двигать +клавиатурой. Масштаб 100–300%; область кадра и положение круглого логотипа фиксированы. +Не добавляем отдельный modal или autosave. Это прямо запрошенная локальная итерация +существующего принятого UI; отдельное утверждение нового экрана не требуется. + +Исходные файлы сохраняются. Настройки кадра — отдельно для desktop cover, mobile +cover и общий круг logo. Мобильная обложка необязательна: без неё берём основной +файл, но разрешаем отдельный мобильный кадр. Новая загрузка/удаление сбрасывают +соответствующий кадр. Если заменён основной файл и mobile использует fallback, +сбрасывается и мобильный кадр. Save и cancel сохраняют существующий lifecycle/409. + +## Contract / roles + +- Django PartnerProgram: nullable `mobile_cover_image_address`; JSON `image_framing`, + default `{}`. Новая additive migration0020; legacy выглядит как прежде. +- JSON `{cover:{x:50,y:50,zoom:1},mobile_cover:{...},logo:{...}}`; + x/y — положение в диапазоне0–100, zoom1–3. Сохраняем полный объект либо `{}` для + reset. Строгая валидация формы/ключей, конечные числа, запрет boolean/string/null. +- Existing PATCH `/programs/:id/management/settings/basic/`: оба новых поля optional, + остальной payload/expected_updated_at/atomic lock/permissions unchanged. +- GET management и public/member detail возвращают новые поля. List возвращает + `image_framing`, чтобы logo в списках/сайдбаре имел тот же кадр. Старые клиенты + игнорируют additive поля; frontend tolerates missing fields. +- Только текущие manager/staff по существующему can_manage_program меняют настройки; + anonymous/member/expert/чужой manager не получают write доступ. +- Сначала backend + migration на dev, затем frontend. Production вне scope. + +## Acceptance criteria + +| AC | Наблюдаемый результат | +| --- | -------------------------------------------------------------------------------------------------------------------------------- | +| F1 | Desktop/mobile cover и logo сдвигаются drag/keyboard/buttons, масштабируются100–300%, без пустых краёв и смены размера кадра | +| F2 | Новый mobile файл используется только на телефоне; без него — основной cover с независимым mobile кадром | +| F3 | Draft меняется до Save; после Save/reload реальные header и program logos повторяют crop; cancel восстанавливает сохранённое | +| F4 | Replace/remove/reset корректно сбрасывают кадр, failed upload и409 не теряют draft; mode/target не dirty-ят форму | +| F5 | Server rejects malformed/non-finite/out-of-range/unknown data атомарно; permissions иoptimistic lock действуют для новых полей | +| F6 | Legacy программы и profile/project avatars выглядят как прежде; no horizontal overflow, touch/keyboard usable, busy/error guards | + +## Plan / verification + +1. API model/migration/strict serializer/read contracts; PostgreSQL targeted tests, + public/member/list compatibility, permissions/stale/invalid payload. +2. Shared framing rendering primitive; opt-in Avatar framing, program Detail cover + and all existing program logo consumers. Unit regressions and Angular build. +3. Management draft control + mobile upload + preview drag/range/keyboard/reset; + preserve saving/cancel/guards. DOM integration + geometry tests. +4. Isolated Chrome against real local Django/PostgreSQL; mouse/touch, both sources, + save/reload/cancel/409/failure, actual-vs-preview framing and narrow viewport. +5. Requirement audit/code review; separate dev PRs, backend-first rollout/full CI, + live release smoke. Record real evidence and limitations below. + +## Evidence + +Review **PASS**: блокирующих замечаний нет. Проверены runtime diff, новые файлы, +API compatibility и opt-in Avatar rendering; исходники не переписываются. + +| AC | Evidence | Verdict | +| --- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------- | +| F1 | Chrome mouse и native CDP touch; keyboard slider/Shift+arrows, unit clamps/reset/busy; кадр fixed/clipped, positions bounded | PASS | +| F2 | Реальный local multipart mobile upload, независимые transform и URL; fallback проверен до/после удаления | PASS | +| F3 | Local API не менялся до Save; Save/reload и точное совпадение computed framing, размеров, natural dimensions, источников с actual header в1440/360; sidebar logo | PASS | +| F4 | DOM upload/reset tests; browser cancel/failed upload413/concurrent PATCH409 без потери draft; toggles pristine | PASS | +| F5 | 48 API tests на local PostgreSQL, включая5 новых; invalid/finite/range/huge int/roles/stale/atomic update; final framing5PASS | PASS | +| F6 | Legacy Avatar/profile/project tests и source diff; mobile360/390 оба режима без overflow; page errors0; новые controls44px | PASS | + +- Angular targeted tests/build/ESLint/Stylelint/format: результаты и full CI в PR. +- Local Django migration0020 применена; makemigrations --check — no changes. + -7 browser scenarios PASS на реальных local Django/PostgreSQL. Только внешний + object storage заменён local adapter. Один harness retry: native output также + имеет role=status, поэтому ожидание upload уточнено до p[role=status]. +- Новый hint использует существующий token black для читаемого текста; Mont, + button foundation, spacing/radius и существующий preview сохранены. + +[Desktop](image-framing-20261017/desktop.png), [mobile](image-framing-20261017/mobile.png), +[geometry/browser evidence](image-framing-20261017/browser-qa.json). + +Not checked: физический телефон, OS screen reader, Selectel upload transport, +live organizer session. Native touch input проверен через Chrome CDP. +Backend PR [782](https://github.com/PROCOLLAB-github/api/pull/782); только dev rollout, +сначала API/migration, затем Angular. Live release checks будут в PR после deployment. diff --git a/docs/qa/program-management-v1/image-framing-20261017/browser-qa.json b/docs/qa/program-management-v1/image-framing-20261017/browser-qa.json new file mode 100644 index 000000000..c246ebafc --- /dev/null +++ b/docs/qa/program-management-v1/image-framing-20261017/browser-qa.json @@ -0,0 +1,64 @@ +{ + "checks": [ + "Mode/target toggles keep form pristine; mobile uploader is optional and visible", + "Mouse drag and keyboard slider edit cover/logo draft without persisting program", + "Mobile fallback has independent crop; separate mobile upload resets only mobile crop and leaves desktop/logo unchanged", + "Save/reload roundtrip and real desktop/mobile header crop match preview exactly; sidebar logo uses saved framing", + "Cancel and failed upload preserve correct frame; real concurrent update returns409 without losing unsaved crop", + "Native touch drag, keyboard arrows and controls work at360/390px; both reference modes have no horizontal overflow", + "Removing mobile returns to main cover/default crop; removing all covers disables editing; cancel restores saved sources" + ], + "errors": [], + "blockedExternal": [ + "gc.kis.v2.scr.kaspersky-labs.com", + "fonts.googleapis.com", + "gc.kis.v2.scr.kaspersky-labs.com", + "fonts.googleapis.com", + "gc.kis.v2.scr.kaspersky-labs.com", + "fonts.googleapis.com" + ], + "geometry": [ + { + "device": "desktop", + "cover": { + "url": "https://example.com/preview-cover.svg", + "position": "60.68% 30.17%", + "origin": "525.887px 46.7635px", + "transform": "matrix(1.65, 0, 0, 1.65, 0, 0)", + "natural": [1800, 320], + "width": 867, + "height": 155 + }, + "logo": { + "url": "https://example.com/preview-logo.svg", + "position": "55.5% 35.33%", + "origin": "67.155px 42.7493px", + "transform": "matrix(1.5, 0, 0, 1.5, 0, 0)", + "natural": [600, 300], + "width": 121, + "height": 121 + } + }, + { + "device": "mobile", + "cover": { + "url": "https://example.com/local-material-mobile-1792253248780.svg", + "position": "68.29% 21.29%", + "origin": "223.991px 28.9544px", + "transform": "matrix(1.25, 0, 0, 1.25, 0, 0)", + "natural": [960, 400], + "width": 328, + "height": 136 + }, + "logo": { + "url": "https://example.com/preview-logo.svg", + "position": "55.5% 35.33%", + "origin": "57.165px 36.3899px", + "transform": "matrix(1.5, 0, 0, 1.5, 0, 0)", + "natural": [600, 300], + "width": 103, + "height": 103 + } + } + ] +} diff --git a/docs/qa/program-management-v1/image-framing-20261017/desktop.png b/docs/qa/program-management-v1/image-framing-20261017/desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..58d6517ab87f226d2b2dc78e8331c0cb15e3083f GIT binary patch literal 121879 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≉-GJC-9(T2@FoN_oP55dnG0yB%tzJf;tU7o8D(c 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 z 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/qa/program-management-v1/image-framing-20261017/mobile.png b/docs/qa/program-management-v1/image-framing-20261017/mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..235665fb8d674ceb7a7b5c383e8777a9d5923b9a GIT binary patch literal 64360 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 F{XejIZ&3gM literal 0 HcmV?d00001 diff --git a/projects/social_platform/src/app/domain/program/program-image-framing.model.ts b/projects/social_platform/src/app/domain/program/program-image-framing.model.ts new file mode 100644 index 000000000..4112195c6 --- /dev/null +++ b/projects/social_platform/src/app/domain/program/program-image-framing.model.ts @@ -0,0 +1,9 @@ +/** @format */ + +export interface ProgramImageFrame { + x: number; + y: number; + zoom: number; +} +export type ProgramImageKey = "cover" | "mobileCover" | "logo"; +export type ProgramImageFraming = Partial>; diff --git a/projects/social_platform/src/app/domain/program/program-management.model.ts b/projects/social_platform/src/app/domain/program/program-management.model.ts index a8c060d0d..fdb9d2108 100644 --- a/projects/social_platform/src/app/domain/program/program-management.model.ts +++ b/projects/social_platform/src/app/domain/program/program-management.model.ts @@ -1,5 +1,7 @@ /** @format */ +import { ProgramImageFraming } from "./program-image-framing.model"; + export type ManagementSection = | "participants" | "projects" @@ -21,6 +23,8 @@ export interface ManagementBasic { description: string | null; imageAddress: string | null; coverImageAddress: string | null; + mobileCoverImageAddress?: string | null; + imageFraming?: ProgramImageFraming; advertisementImageAddress: string | null; registrationLink: string | null; presentationAddress: string | null; @@ -112,7 +116,7 @@ export interface ManagementQuery { export interface ManagementSettingsWrite { expectedUpdatedAt: string; confirmReopen?: boolean; - [field: string]: string | boolean | null | undefined; + [field: string]: string | boolean | null | undefined | ProgramImageFraming; } export interface ManagementMaterialWrite { title: string; diff --git a/projects/social_platform/src/app/domain/program/program.model.ts b/projects/social_platform/src/app/domain/program/program.model.ts index e62c06603..499255db2 100644 --- a/projects/social_platform/src/app/domain/program/program.model.ts +++ b/projects/social_platform/src/app/domain/program/program.model.ts @@ -1,5 +1,7 @@ /** @format */ +import { ProgramImageFraming } from "./program-image-framing.model"; + export interface ProgramCurrentApplication { projectId: number; programLinkId: number; @@ -11,6 +13,8 @@ export class Program { id!: number; imageAddress!: string; coverImageAddress!: string; + mobileCoverImageAddress?: string | null; + imageFraming?: ProgramImageFraming; presentationAddress!: string; advertisementImageAddress!: string; name!: string; diff --git a/projects/social_platform/src/app/ui/pages/office/program-sidebar-card/program-sidebar-card.component.html b/projects/social_platform/src/app/ui/pages/office/program-sidebar-card/program-sidebar-card.component.html index a6ac4e94e..643fbedf5 100644 --- a/projects/social_platform/src/app/ui/pages/office/program-sidebar-card/program-sidebar-card.component.html +++ b/projects/social_platform/src/app/ui/pages/office/program-sidebar-card/program-sidebar-card.component.html @@ -3,7 +3,11 @@

- +

до {{ program().datetimeRegistrationEnds | date: "dd.MM.yy" }}

diff --git a/projects/social_platform/src/app/ui/pages/program/main/program-card/program-card.component.html b/projects/social_platform/src/app/ui/pages/program/main/program-card/program-card.component.html index 826edca5b..491f35d5c 100644 --- a/projects/social_platform/src/app/ui/pages/program/main/program-card/program-card.component.html +++ b/projects/social_platform/src/app/ui/pages/program/main/program-card/program-card.component.html @@ -4,7 +4,11 @@ @if (program()) {
- +
@@ -47,7 +51,11 @@ @if (program()) {
- +
diff --git a/projects/social_platform/src/app/ui/pages/program/management/branding-preview/branding-preview.component.html b/projects/social_platform/src/app/ui/pages/program/management/branding-preview/branding-preview.component.html index aaca8fa04..e4a02674e 100644 --- a/projects/social_platform/src/app/ui/pages/program/management/branding-preview/branding-preview.component.html +++ b/projects/social_platform/src/app/ui/pages/program/management/branding-preview/branding-preview.component.html @@ -27,8 +27,27 @@

Предпросмотр шапки и лого

- Так будут выглядеть выбранные изображения. Изменения появятся на странице после сохранения. + Выберите изображение, переместите его в кадре и настройте масштаб. Изменения появятся на + странице после сохранения.

+
+ + +
Предпросмотр шапки и лого [style.--logo-size]="logoSize() + 'px'" >
- Обложка программы в предпросмотре - +
+ Обложка программы в предпросмотре +
+
+ +
+
+ +
+ + + + +
+ +
+

+ Двигайте изображение мышью или пальцем. Когда кадр в фокусе, используйте стрелки клавиатуры; + Shift — для большего сдвига. +

+ @if (device() === "mobile" && !mobileCover()) { +

+ Сейчас используется основная обложка. Можно загрузить отдельную обложку для телефона выше. +

+ }

{{ device() === "desktop" ? "Пример для экрана 1440 px" : "Пример для экрана 360 px" }}. Края обложки за пределами шапки обрезаются, логотип отображается в круге. diff --git a/projects/social_platform/src/app/ui/pages/program/management/branding-preview/branding-preview.component.scss b/projects/social_platform/src/app/ui/pages/program/management/branding-preview/branding-preview.component.scss index 1039cb92a..da45ae228 100644 --- a/projects/social_platform/src/app/ui/pages/program/management/branding-preview/branding-preview.component.scss +++ b/projects/social_platform/src/app/ui/pages/program/management/branding-preview/branding-preview.component.scss @@ -44,7 +44,7 @@ } &__hint { - color: var(--dark-grey); + color: var(--black); } &__viewport { @@ -80,20 +80,88 @@ border-radius: inherit; } - &__logo { + &__cover-frame { + position: absolute; + inset: 0; + overflow: hidden; + border-radius: inherit; + } + + &__logo-frame { @include program-branding.desktop-logo; position: absolute; box-sizing: border-box; width: var(--logo-size); height: var(--logo-size); - object-fit: cover; - object-position: center; + overflow: hidden; background: var(--white); border: 0.5px solid var(--dark-grey); border-radius: 50%; } + &__logo { + display: block; + width: 100%; + height: 100%; + } + + &__frame--editable { + touch-action: none; + cursor: grab; + user-select: none; + + &:active { + cursor: grabbing; + } + + &:focus-visible { + outline: 2px solid var(--accent); + outline-offset: 3px; + } + } + + &__frame--active { + outline: 2px solid var(--accent); + outline-offset: 2px; + } + + &__controls { + display: flex; + flex-wrap: wrap; + gap: 16px; + align-items: center; + } + + &__zoom { + display: flex; + flex: 1 1 240px; + gap: 12px; + align-items: center; + + input { + flex: 1; + min-width: 60px; + min-height: 44px; + accent-color: var(--accent); + } + + output { + min-width: 40px; + } + } + + &__move { + display: flex; + gap: 8px; + + button { + min-width: 44px; + padding: 8px; + font-size: 18px; + } + } + &__canvas--mobile { padding-bottom: 32px; @@ -101,7 +169,7 @@ @include program-branding.mobile-cover; } - .branding-preview__logo { + .branding-preview__logo-frame { @include program-branding.mobile-logo; } } diff --git a/projects/social_platform/src/app/ui/pages/program/management/branding-preview/branding-preview.component.spec.ts b/projects/social_platform/src/app/ui/pages/program/management/branding-preview/branding-preview.component.spec.ts index d649adc1f..5ad0dcc59 100644 --- a/projects/social_platform/src/app/ui/pages/program/management/branding-preview/branding-preview.component.spec.ts +++ b/projects/social_platform/src/app/ui/pages/program/management/branding-preview/branding-preview.component.spec.ts @@ -31,7 +31,9 @@ describe("Предпросмотр оформления программы", () it("режим экрана доступен кнопками и сохраняется при изменении изображений", () => { const { fixture, element } = setup(); - const buttons = element.querySelectorAll("button"); + const buttons = element.querySelectorAll( + '[aria-label="Экран предпросмотра"] button', + ); buttons[1].click(); fixture.detectChanges(); expect(buttons[0].getAttribute("aria-pressed")).toBe("false"); @@ -47,6 +49,93 @@ describe("Предпросмотр оформления программы", () expect(element.textContent).toContain("экрана 1440 px"); }); + it("отдельный mobile source и frame не меняют desktop; общий logo редактируется независимо", () => { + const { fixture, element, cover, logo } = setup(); + fixture.componentInstance.device.set("desktop"); + fixture.componentRef.setInput("cover", "https://example.com/desktop.png"); + fixture.componentRef.setInput("mobileCover", "https://example.com/mobile.png"); + fixture.componentRef.setInput("logo", "https://example.com/logo.png"); + fixture.componentInstance.framingChange.subscribe(value => + fixture.componentRef.setInput("framing", value), + ); + fixture.detectChanges(); + const slider = element.querySelector('input[type="range"]')!; + slider.value = "1.8"; + slider.dispatchEvent(new Event("input", { bubbles: true })); + fixture.detectChanges(); + expect(cover().style.transform).toBe("scale(1.8)"); + fixture.componentInstance.device.set("mobile"); + fixture.detectChanges(); + expect(cover().src).toBe("https://example.com/mobile.png"); + expect(slider.value).toBe("1"); + element.querySelector(".branding-preview__cover-frame")!.dispatchEvent( + new KeyboardEvent("keydown", { + key: "ArrowLeft", + shiftKey: true, + bubbles: true, + cancelable: true, + }), + ); + fixture.detectChanges(); + expect(cover().style.objectPosition).toBe("60% 50%"); + fixture.componentInstance.target.set("logo"); + fixture.componentInstance.move(-10, 20); + fixture.detectChanges(); + expect(logo().style.objectPosition).toBe("40% 70%"); + expect(fixture.componentInstance.frames().cover.zoom).toBe(1.8); + fixture.componentRef.setInput("mobileCover", null); + fixture.detectChanges(); + expect(cover().src).toBe("https://example.com/desktop.png"); + expect(cover().style.objectPosition).toBe("60% 50%"); + }); + + it("drag учитывает zoom, ограничивает края, busy блокирует правки; reset не меняет остальные кадры", () => { + const { fixture, element, cover } = setup(); + const component = fixture.componentInstance; + component.device.set("desktop"); + fixture.componentRef.setInput("cover", "https://example.com/cover.png"); + fixture.componentRef.setInput("framing", { cover: { x: 50, y: 50, zoom: 2 } }); + const changed = vi.fn(value => fixture.componentRef.setInput("framing", value)); + component.framingChange.subscribe(changed); + fixture.detectChanges(); + const frame = element.querySelector(".branding-preview__cover-frame")!; + Object.defineProperties(frame, { clientWidth: { value: 400 }, clientHeight: { value: 100 } }); + Object.defineProperties(cover(), { + naturalWidth: { value: 1000 }, + naturalHeight: { value: 500 }, + }); + function pointer(type: string, x: number, y: number) { + const event = new MouseEvent(type, { + clientX: x, + clientY: y, + button: 0, + bubbles: true, + cancelable: true, + }); + Object.defineProperty(event, "pointerId", { value: 1 }); + frame.dispatchEvent(event); + fixture.detectChanges(); + } + pointer("pointerdown", 100, 50); + pointer("pointermove", 150, 80); + expect(component.frames().cover).toEqual({ x: 37.5, y: 40, zoom: 2 }); + pointer("pointermove", 9999, -9999); + expect(component.frames().cover).toEqual({ x: 0, y: 100, zoom: 2 }); + pointer("pointerup", 9999, -9999); + fixture.componentRef.setInput("busy", true); + fixture.detectChanges(); + changed.mockClear(); + component.move(2, 2); + component.resetFrame(); + expect(changed).not.toHaveBeenCalled(); + fixture.componentRef.setInput("busy", false); + fixture.detectChanges(); + component.resetFrame(); + fixture.detectChanges(); + expect(component.frames().cover).toEqual({ x: 50, y: 50, zoom: 1 }); + expect(component.frames().mobileCover).toEqual({ x: 50, y: 50, zoom: 1 }); + }); + it("показывает busy и ошибку изображения, не изменяя URL; замена очищает ошибку", () => { const { fixture, element, cover } = setup(); fixture.componentRef.setInput("cover", "https://example.com/broken.png"); diff --git a/projects/social_platform/src/app/ui/pages/program/management/branding-preview/branding-preview.component.ts b/projects/social_platform/src/app/ui/pages/program/management/branding-preview/branding-preview.component.ts index 974d04765..20c8123a5 100644 --- a/projects/social_platform/src/app/ui/pages/program/management/branding-preview/branding-preview.component.ts +++ b/projects/social_platform/src/app/ui/pages/program/management/branding-preview/branding-preview.component.ts @@ -10,15 +10,26 @@ import { ElementRef, inject, input, + output, signal, viewChild, } from "@angular/core"; -import { AVATAR_PLACEHOLDER_URL, ButtonDirective } from "@uilib"; -import { PROGRAM_DEFAULT_COVER, PROGRAM_LOGO_SIZES } from "@utils/program-branding"; +import { AVATAR_PLACEHOLDER_URL, ButtonDirective, ImageFramingDirective } from "@uilib"; +import { + DEFAULT_IMAGE_FRAME, + PROGRAM_DEFAULT_COVER, + PROGRAM_LOGO_SIZES, + programImageFraming, +} from "@utils/program-branding"; +import { + ProgramImageFrame, + ProgramImageFraming, + ProgramImageKey, +} from "@domain/program/program-image-framing.model"; @Component({ selector: "app-program-branding-preview", - imports: [ButtonDirective], + imports: [ButtonDirective, ImageFramingDirective], templateUrl: "./branding-preview.component.html", styleUrl: "./branding-preview.component.scss", changeDetection: ChangeDetectionStrategy.OnPush, @@ -26,9 +37,26 @@ import { PROGRAM_DEFAULT_COVER, PROGRAM_LOGO_SIZES } from "@utils/program-brandi export class ProgramBrandingPreviewComponent { readonly cover = input(null); readonly logo = input(null); + readonly mobileCover = input(null); + readonly framing = input(null); + readonly disabled = input(false); + readonly framingChange = output(); readonly busy = input(false); readonly device = signal<"desktop" | "mobile">(window.innerWidth < 1000 ? "mobile" : "desktop"); - readonly coverUrl = computed(() => this.cover() || PROGRAM_DEFAULT_COVER); + readonly target = signal<"cover" | "logo">("cover"); + readonly frames = computed(() => programImageFraming(this.framing())); + readonly coverKey = computed(() => + this.device() === "mobile" ? "mobileCover" : "cover", + ); + readonly activeKey = computed(() => + this.target() === "logo" ? "logo" : this.coverKey(), + ); + readonly activeFrame = computed(() => this.frames()[this.activeKey()]); + readonly zoomPercent = computed(() => Math.round(this.activeFrame().zoom * 100)); + readonly selectedCover = computed( + () => (this.device() === "mobile" && this.mobileCover()) || this.cover(), + ); + readonly coverUrl = computed(() => this.selectedCover() || PROGRAM_DEFAULT_COVER); readonly logoUrl = computed(() => this.logo() || AVATAR_PLACEHOLDER_URL); readonly coverFailed = signal(false); readonly logoFailed = signal(false); @@ -46,8 +74,110 @@ export class ProgramBrandingPreviewComponent { private readonly viewport = viewChild.required>("viewport"); private readonly canvas = viewChild.required>("canvas"); private readonly destroyRef = inject(DestroyRef); + private drag: { + id: number; + element: HTMLElement; + key: ProgramImageKey; + x: number; + y: number; + frame: ProgramImageFrame; + overflowX: number; + overflowY: number; + } | null = null; + + available(target: "cover" | "logo"): boolean { + return ( + !this.disabled() && + !this.busy() && + !!(target === "logo" ? this.logo() : this.selectedCover()) && + !(target === "logo" ? this.logoFailed() : this.coverFailed()) + ); + } + editable(): boolean { + return this.available(this.target()); + } + private updateFrame(key: ProgramImageKey, frame: ProgramImageFrame): void { + if (!this.editable()) return; + const next = { + x: Math.round(Math.min(100, Math.max(0, frame.x)) * 100) / 100, + y: Math.round(Math.min(100, Math.max(0, frame.y)) * 100) / 100, + zoom: Math.round(Math.min(3, Math.max(1, frame.zoom)) * 100) / 100, + }; + const previous = this.frames()[key]; + if (next.x === previous.x && next.y === previous.y && next.zoom === previous.zoom) return; + this.framingChange.emit({ ...this.frames(), [key]: next }); + } + setZoom(event: Event): void { + const zoom = Number((event.target as HTMLInputElement).value); + if (Number.isFinite(zoom)) this.updateFrame(this.activeKey(), { ...this.activeFrame(), zoom }); + } + move(x: number, y: number): void { + const frame = this.activeFrame(); + this.updateFrame(this.activeKey(), { ...frame, x: frame.x + x, y: frame.y + y }); + } + resetFrame(): void { + this.updateFrame(this.activeKey(), { ...DEFAULT_IMAGE_FRAME }); + } + onFrameKey(event: KeyboardEvent, target: "cover" | "logo"): void { + if (!this.available(target)) return; + const direction: Record = { + ArrowLeft: [1, 0], + ArrowRight: [-1, 0], + ArrowUp: [0, 1], + ArrowDown: [0, -1], + }; + const delta = direction[event.key]; + if (!delta) return; + event.preventDefault(); + this.target.set(target); + const step = event.shiftKey ? 10 : 2; + this.move(delta[0] * step, delta[1] * step); + } + startDrag(event: PointerEvent, target: "cover" | "logo"): void { + if (event.button !== 0 || event.isPrimary === false || !this.available(target)) return; + this.target.set(target); + const element = event.currentTarget as HTMLElement; + const img = element.querySelector("img"); + if (!img?.naturalWidth || !img.naturalHeight) return; + const frame = this.activeFrame(); + const imageScale = + Math.max(element.clientWidth / img.naturalWidth, element.clientHeight / img.naturalHeight) * + frame.zoom; + this.drag = { + id: event.pointerId, + element, + key: this.activeKey(), + x: event.clientX, + y: event.clientY, + frame, + overflowX: Math.max(0, img.naturalWidth * imageScale - element.clientWidth) * this.scale(), + overflowY: Math.max(0, img.naturalHeight * imageScale - element.clientHeight) * this.scale(), + }; + event.preventDefault(); + element.focus({ preventScroll: true }); + element.setPointerCapture?.(event.pointerId); + } + moveDrag(event: PointerEvent): void { + const drag = this.drag; + if (!drag || drag.id !== event.pointerId || drag.key !== this.activeKey() || !this.editable()) + return; + event.preventDefault(); + this.updateFrame(drag.key, { + ...drag.frame, + x: + drag.frame.x - (drag.overflowX > 0 ? ((event.clientX - drag.x) / drag.overflowX) * 100 : 0), + y: + drag.frame.y - (drag.overflowY > 0 ? ((event.clientY - drag.y) / drag.overflowY) * 100 : 0), + }); + } + stopDrag(): void { + const drag = this.drag; + this.drag = null; + if (drag?.element.hasPointerCapture?.(drag.id)) drag.element.releasePointerCapture(drag.id); + } constructor() { + this.destroyRef.onDestroy(() => this.stopDrag()); effect(() => { this.coverUrl(); this.coverFailed.set(false); diff --git a/projects/social_platform/src/app/ui/pages/program/management/management.component.html b/projects/social_platform/src/app/ui/pages/program/management/management.component.html index ed22491af..1d646bd5f 100644 --- a/projects/social_platform/src/app/ui/pages/program/management/management.component.html +++ b/projects/social_platform/src/app/ui/pages/program/management/management.component.html @@ -441,10 +441,7 @@

Изображения

type="button" appButton="text" [disabled]="!!uploading() || saving()" - (click)=" - basicForm.get(image.key)?.setValue(''); - basicForm.get(image.key)?.markAsDirty() - " + (click)="clearImage(image.key)" > Убрать @@ -455,7 +452,11 @@

Изображения

} } diff --git a/projects/social_platform/src/app/ui/pages/program/management/management.component.spec.ts b/projects/social_platform/src/app/ui/pages/program/management/management.component.spec.ts index b0900fcf8..45ced320e 100644 --- a/projects/social_platform/src/app/ui/pages/program/management/management.component.spec.ts +++ b/projects/social_platform/src/app/ui/pages/program/management/management.component.spec.ts @@ -103,6 +103,36 @@ describe("Сохранение настроек организатора", () => expect(component.basicForm.dirty).toBe(true); expect(component.formError()).toContain("Данные изменились"); }); + it("сохраняет mobile URL и полный framing; 409 оставляет кадр для повторной попытки", () => { + const { component, save } = setup(); + component.settingsTab.set("basic"); + const framing = { + cover: { x: 20, y: 70, zoom: 2 }, + mobileCover: { x: 80, y: 30, zoom: 1.5 }, + logo: { x: 50, y: 50, zoom: 1 }, + }; + component.changeFraming(framing); + component.basicForm.controls.mobileCoverImageAddress.setValue("https://example.com/mobile.png"); + component.basicForm.controls.mobileCoverImageAddress.markAsDirty(); + save.mockReturnValue( + throwError( + () => + new HttpErrorResponse({ + status: 409, + error: { code: "stale_settings", detail: "Кадр изменён другим организатором" }, + }), + ), + ); + component.save(); + expect(save).toHaveBeenCalledWith(1, "basic", { + expectedUpdatedAt: program.updatedAt, + confirmReopen: false, + mobileCoverImageAddress: "https://example.com/mobile.png", + imageFraming: framing, + }); + expect(component.basicForm.controls.imageFraming.value).toEqual(framing); + expect(component.basicForm.dirty).toBe(true); + }); }); describe("Списки управления программой в DOM", () => { @@ -188,6 +218,49 @@ describe("Списки управления программой в DOM", () => return event as DragEvent; } + it("замена и удаление изображений сбрасывают только зависимые кадры, включая mobile fallback", async () => { + const { component, harness, element, uploaded } = await setup("settings", "?tab=basic"); + const framing = { + cover: { x: 20, y: 30, zoom: 2 }, + mobileCover: { x: 80, y: 70, zoom: 3 }, + logo: { x: 40, y: 60, zoom: 1.5 }, + }; + component.basicForm.controls.mobileCoverImageAddress.setValue("https://example.com/mobile.png"); + component.changeFraming(framing); + const input = element().querySelector( + 'input[type=file][aria-describedby="program-image-hint-coverImageAddress"]', + )!; + Object.defineProperty(input, "files", { + value: [new File(["image"], "cover.png", { type: "image/png" })], + }); + input.dispatchEvent(new Event("change", { bubbles: true })); + uploaded.next({ url: "https://example.com/cover.png" }); + uploaded.complete(); + harness.detectChanges(); + expect(component.basicForm.controls.imageFraming.value).toEqual({ + ...framing, + cover: { x: 50, y: 50, zoom: 1 }, + }); + component.clearImage("mobileCoverImageAddress"); + expect(component.basicForm.controls.imageFraming.value.mobileCover).toEqual({ + x: 50, + y: 50, + zoom: 1, + }); + component.changeFraming(framing); + component.clearImage("coverImageAddress"); + expect(component.basicForm.controls.imageFraming.value).toEqual({ + ...framing, + cover: { x: 50, y: 50, zoom: 1 }, + mobileCover: { x: 50, y: 50, zoom: 1 }, + }); + component.clearImage("imageAddress"); + expect(component.basicForm.controls.imageFraming.value.logo).toEqual({ x: 50, y: 50, zoom: 1 }); + component.resetForms(); + expect(component.basicForm.pristine).toBe(true); + expect(component.basicForm.controls.mobileCoverImageAddress.value).toBe(""); + }); + it("предпросмотр использует несохранённую загрузку; переключение не сохраняет и не меняет dirty", async () => { const { component, harness, element, state, uploaded } = await setup("settings", "?tab=basic"); const save = vi.spyOn(component, "save"); diff --git a/projects/social_platform/src/app/ui/pages/program/management/management.component.ts b/projects/social_platform/src/app/ui/pages/program/management/management.component.ts index 8650531b1..ccb592ba9 100644 --- a/projects/social_platform/src/app/ui/pages/program/management/management.component.ts +++ b/projects/social_platform/src/app/ui/pages/program/management/management.component.ts @@ -51,6 +51,8 @@ import { ProgramAnalyticsComponent } from "../detail/analytics/analytics.compone import { ProgramBrandingPreviewComponent } from "./branding-preview/branding-preview.component"; import { presentationHref } from "@utils/program-case-analytics"; import { evaluationLabel, fromMoscowInput, toMoscowInput } from "@utils/program-management"; +import { DEFAULT_IMAGE_FRAME, programImageFraming } from "@utils/program-branding"; +import { ProgramImageFraming, ProgramImageKey } from "@domain/program/program-image-framing.model"; @Component({ selector: "app-program-management", @@ -136,6 +138,8 @@ export class ProgramManagementComponent implements OnInit { description: [""], imageAddress: [""], coverImageAddress: [""], + mobileCoverImageAddress: [""], + imageFraming: this.fb.control(programImageFraming()), advertisementImageAddress: [""], registrationLink: [""], presentationAddress: [""], @@ -165,6 +169,12 @@ export class ProgramManagementComponent implements OnInit { dimensions: "Рекомендуемый размер: 1800 × 320 px (примерно 5,6:1).", hint: "Размещайте важные детали вверху по центру: на узком экране края обрезаются, а снизу расположен логотип.", }, + { + key: "mobileCoverImageAddress", + label: "Обложка для телефона", + dimensions: "Рекомендуемый размер: 960 × 400 px (примерно 2,4:1).", + hint: "Необязательно. Без отдельного файла используется основная обложка. Кадр для телефона можно настроить независимо.", + }, { key: "imageAddress", label: "Логотип программы", @@ -379,6 +389,8 @@ export class ProgramManagementComponent implements OnInit { description: p.description ?? "", imageAddress: p.imageAddress ?? "", coverImageAddress: p.coverImageAddress ?? "", + mobileCoverImageAddress: p.mobileCoverImageAddress ?? "", + imageFraming: programImageFraming(p.imageFraming), advertisementImageAddress: p.advertisementImageAddress ?? "", registrationLink: p.registrationLink ?? "", presentationAddress: p.presentationAddress ?? "", @@ -404,7 +416,10 @@ export class ProgramManagementComponent implements OnInit { const body: ManagementSettingsWrite = { expectedUpdatedAt: p.updatedAt, confirmReopen }; for (const [name, control] of Object.entries(form.controls)) if (control.dirty) - body[name] = section === "dates" ? fromMoscowInput(control.value) : control.value; + body[name] = + section === "dates" && typeof control.value === "string" + ? fromMoscowInput(control.value) + : control.value; this.saving.set(true); this.formError.set(null); this.saved.set(false); @@ -466,6 +481,7 @@ export class ProgramManagementComponent implements OnInit { target === "material" ? this.materialForm.controls.file : this.basicForm.get(target); control?.setValue(url); control?.markAsDirty(); + if (target !== "material") this.resetFrameForImage(target); if (target === "material") this.materialFileName.set(file.name); }, error: (error: HttpErrorResponse) => @@ -476,6 +492,33 @@ export class ProgramManagementComponent implements OnInit { ), }); } + clearImage(target: string): void { + if (this.saving() || this.uploading()) return; + const control = this.basicForm.get(target); + control?.setValue(""); + control?.markAsDirty(); + this.resetFrameForImage(target); + } + changeFraming(value: ProgramImageFraming): void { + if (this.saving() || this.uploading()) return; + this.basicForm.controls.imageFraming.setValue(value); + this.basicForm.controls.imageFraming.markAsDirty(); + } + private resetFrameForImage(target: string): void { + const keys: Record = { + imageAddress: "logo", + coverImageAddress: "cover", + mobileCoverImageAddress: "mobileCover", + }; + const key = keys[target]; + if (!key) return; + const framing = programImageFraming(this.basicForm.controls.imageFraming.value); + framing[key] = { ...DEFAULT_IMAGE_FRAME }; + if (key === "cover" && !this.basicForm.controls.mobileCoverImageAddress.value) + framing.mobileCover = { ...DEFAULT_IMAGE_FRAME }; + this.basicForm.controls.imageFraming.setValue(framing); + this.basicForm.controls.imageFraming.markAsDirty(); + } onMaterialDragEnter(event: DragEvent): void { if (!event.dataTransfer?.types.includes("Files")) return; event.preventDefault(); diff --git a/projects/social_platform/src/app/ui/primitives/avatar/avatar.component.html b/projects/social_platform/src/app/ui/primitives/avatar/avatar.component.html index 803a1e35e..dcfe9f414 100644 --- a/projects/social_platform/src/app/ui/primitives/avatar/avatar.component.html +++ b/projects/social_platform/src/app/ui/primitives/avatar/avatar.component.html @@ -1,6 +1,6 @@ @if (desktopLayout()) { -
+
@if (progress()) {
} - avatar + @if (imageFraming()) { +
+ avatar +
+ } @else { + avatar + } @if (isOnline()) {
} - avatar + @if (imageFraming()) { +
+ avatar +
+ } @else { + avatar + } @if (isOnline()) {
- cover + @if (listType() === "program") { +
+ Обложка программы +
+ } @else { + cover + }
@if (chatStateService.userOnlineStatusCache | async; as cache) { = { x: 50, y: 50, zoom: 1 }; + +export function programImageFraming( + value?: ProgramImageFraming | null, +): Record { + return { + cover: { ...DEFAULT_IMAGE_FRAME, ...value?.cover }, + mobileCover: { ...DEFAULT_IMAGE_FRAME, ...value?.mobileCover }, + logo: { ...DEFAULT_IMAGE_FRAME, ...value?.logo }, + }; +} diff --git a/projects/ui/src/lib/components/primitives/avatar/avatar.component.html b/projects/ui/src/lib/components/primitives/avatar/avatar.component.html index f2e14617c..07453c3cb 100644 --- a/projects/ui/src/lib/components/primitives/avatar/avatar.component.html +++ b/projects/ui/src/lib/components/primitives/avatar/avatar.component.html @@ -2,6 +2,7 @@
} - avatar + @if (imageFraming()) { +
+ avatar +
+ } @else { + avatar + } @if (isOnline()) {
{ }).compileComponents(); }); + it("framing is opt-in and keeps circle border, online badge and progress outside the clipped image", () => { + fixture = TestBed.createComponent(AvatarComponent); + fixture.componentRef.setInput("url", "https://example.com/logo.png"); + fixture.componentRef.setInput("imageFraming", { x: 10, y: 70, zoom: 2 }); + fixture.componentRef.setInput("hasBorder", true); + fixture.componentRef.setInput("isOnline", true); + fixture.componentRef.setInput("progress", 80); + fixture.detectChanges(); + const element = fixture.nativeElement as HTMLElement; + const crop = element.querySelector(".avatar__crop")!; + expect((crop.querySelector("img") as HTMLImageElement).style.transform).toBe("scale(2)"); + expect(element.querySelector(".avatar__online")).toBeTruthy(); + expect(element.querySelector(".avatar__progress")).toBeTruthy(); + expect(crop.querySelector(".avatar__online, .avatar__progress")).toBeNull(); + fixture.componentRef.setInput("imageFraming", null); + fixture.detectChanges(); + expect(element.querySelector(".avatar__crop")).toBeNull(); + expect((element.querySelector("img") as HTMLImageElement).style.transform).toBe(""); + }); + it("should create", () => { fixture = TestBed.createComponent(AvatarComponent); component = fixture.componentInstance; diff --git a/projects/ui/src/lib/components/primitives/avatar/avatar.component.ts b/projects/ui/src/lib/components/primitives/avatar/avatar.component.ts index d5c570dcb..d0ca7fa7e 100644 --- a/projects/ui/src/lib/components/primitives/avatar/avatar.component.ts +++ b/projects/ui/src/lib/components/primitives/avatar/avatar.component.ts @@ -1,6 +1,7 @@ /** @format */ import { ChangeDetectionStrategy, Component, input } from "@angular/core"; +import { ImageFraming, ImageFramingDirective } from "../image-framing/image-framing.directive"; export const AVATAR_PLACEHOLDER_URL = "https://hwchamber.co.uk/wp-content/uploads/2022/04/avatar-placeholder.gif"; @@ -29,9 +30,12 @@ export const AVATAR_PLACEHOLDER_URL = templateUrl: "./avatar.component.html", styleUrl: "./avatar.component.scss", standalone: true, + imports: [ImageFramingDirective], changeDetection: ChangeDetectionStrategy.OnPush, }) export class AvatarComponent { + /** Optional framing; existing avatars keep their original rendering. */ + readonly imageFraming = input(null); /** URL изображения аватара */ url = input.required(); diff --git a/projects/ui/src/lib/components/primitives/image-framing/image-framing.directive.spec.ts b/projects/ui/src/lib/components/primitives/image-framing/image-framing.directive.spec.ts new file mode 100644 index 000000000..98d19f223 --- /dev/null +++ b/projects/ui/src/lib/components/primitives/image-framing/image-framing.directive.spec.ts @@ -0,0 +1,32 @@ +/** @format */ + +import { Component, signal } from "@angular/core"; +import { TestBed } from "@angular/core/testing"; +import { ImageFraming, ImageFramingDirective } from "./image-framing.directive"; + +@Component({ + imports: [ImageFramingDirective], + template: 'test', +}) +class Host { + readonly frame = signal | null>(null); +} + +describe("Shared image framing", () => { + it("center defaults and matching origin keep the chosen crop when zooming", () => { + const fixture = TestBed.createComponent(Host); + fixture.detectChanges(); + const image = fixture.nativeElement.querySelector("img") as HTMLImageElement; + expect(image.style.objectPosition).toBe("50% 50%"); + expect(image.style.transform).toBe("scale(1)"); + fixture.componentInstance.frame.set({ x: 20, y: 80, zoom: 2 }); + fixture.detectChanges(); + expect(image.style.objectPosition).toBe("20% 80%"); + expect(image.style.transformOrigin).toBe("20% 80%"); + expect(image.style.transform).toBe("scale(2)"); + fixture.componentInstance.frame.set({ x: -500, y: NaN, zoom: Infinity }); + fixture.detectChanges(); + expect(image.style.objectPosition).toBe("0% 50%"); + expect(image.style.transform).toBe("scale(1)"); + }); +}); diff --git a/projects/ui/src/lib/components/primitives/image-framing/image-framing.directive.ts b/projects/ui/src/lib/components/primitives/image-framing/image-framing.directive.ts new file mode 100644 index 000000000..25c9c0604 --- /dev/null +++ b/projects/ui/src/lib/components/primitives/image-framing/image-framing.directive.ts @@ -0,0 +1,33 @@ +/** @format */ + +import { computed, Directive, input } from "@angular/core"; + +export interface ImageFraming { + x: number; + y: number; + zoom: number; +} + +/** The parent clips the frame; the original image remains untouched. */ +@Directive({ + selector: "img[appImageFraming]", + host: { + "[style.object-fit]": "'cover'", + "[style.object-position]": "position()", + "[style.transform-origin]": "position()", + "[style.transform]": "'scale(' + zoom() + ')'", + }, +}) +export class ImageFramingDirective { + readonly appImageFraming = input | null>(); + private number(value: unknown, fallback: number, min: number, max: number): number { + return typeof value === "number" && Number.isFinite(value) + ? Math.min(max, Math.max(min, value)) + : fallback; + } + readonly position = computed(() => { + const frame = this.appImageFraming(); + return `${this.number(frame?.x, 50, 0, 100)}% ${this.number(frame?.y, 50, 0, 100)}%`; + }); + readonly zoom = computed(() => this.number(this.appImageFraming()?.zoom, 1, 1, 3)); +} diff --git a/projects/ui/src/lib/components/primitives/index.ts b/projects/ui/src/lib/components/primitives/index.ts index 8195c91ab..3f8a3f148 100644 --- a/projects/ui/src/lib/components/primitives/index.ts +++ b/projects/ui/src/lib/components/primitives/index.ts @@ -13,6 +13,7 @@ */ export * from "./avatar/avatar.component"; +export * from "./image-framing/image-framing.directive"; export * from "./back/back.component"; export * from "./button/button.component"; export * from "./icon/icon.component";