Перейти к основному содержимому

application-manager

осторожно

Неактуально

ApplicationManager

Вот интерфейс IApplicationManager.

Здесь перечислены лишь те поля, с которыми взаимодействует внешний код. Внутри каждого конкретного ApplicationManager'а могут быть любые другие поля и методы.

export interface IApplicationManager {
isPreviewMode: boolean;

isNeedsEventPartsAlways?: boolean;

initialize: () => Promise<void>;
cleanup: () => void;

isMultipleSteps: boolean;
finalData: ApplicationModuleContentFinal;

blockManagerList: IBlockManager[];

isDraft: boolean;
saveDraft: () => Promise<boolean>;
send: () => Promise<boolean>;

store: Writable<Record<string, unknown>>;
isDraftSavedStore: Writable<boolean>;

event: Tavrida.Event;
eventForm: Tavrida.EventForm;

getEventPartsStore: () => Readable<Tavrida.EventPart[]>;
eventParts: Tavrida.EventPart[];
currentApplication: Tavrida.EventParticipant;

agreementManager: IAgreementManager;
creativeTaskManager: ICreativeTaskManager;

getCreativeTaskStore?: () => Writable<Tavrida.CreativeTask[] | null>;

getBgSuccessStore: () => Writable<string>;
getBgHeaderStore: () => Writable<string>;
getBgStickyStore: () => Writable<string>;

getEventPartID: () => string | null;
currentEventPartIDStore: Writable<string | null>;
setEventPartID: (eventPartID: string | unknown) => void;
}

isPreviewMode

Прокидывается при создании инстанса, если URL.pathname=/preview или есть серч параметр ?preview=1


isNeedsEventPartsAlways

Выставьте этот флаг в конструкторе, чтобы eventParts'ы текущего ивента подтянулись до инициализации заявки (и были сразу доступны в поле applicationManager.eventParts)


initialize()

Метод, который наследуют у ApplicationManagerRegular остальные. Нужно оверлоадить некоторые из методов, чтобы поменять поведение.

class ApplicationManagerRegular {
async initialize() {
// Именно эти методы стоит оверлоадить, чтобы изменить поведение заявки
await this.checkEventAndForm()
await this.createEventPartsStoreIfNeeded()
await this.subscribeToUser()
await this.checkIsAllowedInitial()
await this.getApplications()
await this.getCurrentApplicationOrCreateOne()
this.setStores()
//..
}
}
к сведению

Внутри любого из этих методов нужно кинуть ApplicationV2InitError, чтобы вызвать попап с ошибкой.

Overload - getEventAndFormId

Поменять способ получения ID ивента и формы

const { eventId, formId, isGetAnyFirstForm } = this.getEventAndFormId()

Overload - checkIsAllowedInitial

Этот метод бросает ошибки инициализации ApplicationV2InitError, если что-то не так.

Идеальный плесйхолдер для того, чтобы выкинуть попап "ивент неактивен, часть неактивна, даты регистрации прошли".


Overload - getCurrentApplicationOrCreateOne

Метод выставляет this.currentApplication

Создает новый черновик, берет существующий или выбрасывает попапы об ошибке. Уникальные сценарии для каждой стратегии писать именно здесь.


cleanup()

Метод, который нужно вызывать в onDestroy свелт компонента. Он подчищает


isMultipleSteps

Выставляется, если шагов больше 1. Это поле читают компоненты загрузки файлов.


finalData

Лучше посмотреть в коде.

Грубо говоря, это тот же массив шагов, как приходит из CMS, но вместо blockId у каждого блока есть svelte-component и BlockManager.


blockManagerList

Плоский массив IBlockManager. Для удобства.


isDraft

Черновик ли. Спорное поле, не совсем нужное.

Влияет на:

  • отображение кнопки "Сохранить черновик"
  • При переходе между шагами, если это не черновик, сразу прыгает, без попытки сохранить черновик.

saveDraft()

Пытается сохранить черновик, пользуясь методом onSaveCommon

Если ловит ошибки - открывает попап с ошибками и возвращает false

Если успешно сохраняет - открывает попап об успешном сохранении черновика и возвращает true,

Если ничего не поменялось - возвращает true.

Далее функции перехода по шагам отлаливают ответ true/false и решают, переходить на следующий шаг.


send()

Пытается отправить заявку, пользуясь методом onSaveCommon

Если ловит ошибки - открывает попап с ошибками и возвращает false

Если ошибок нет - возвращает true

Далее функция отправки заявки ловит true/false, и если true - выводит экран успеха.


store

Стор с participant.formResult.values текущей заявки. То есть значения полей заявки, заполняемых юзером.

При инициализации в него подтягиваются значения с бека, а дальше синхронизируются при каждом сохранении черновика.

На этот стор подписан стор каждого блока. При обновлении ApplicationManager.store, обновятся и значения внутри блоков, трансфомированные с помощью метода BlockManager.fromApp(application)

В превью моде некоторые Стратегии прокидывают заглушечные значения, например, EventPartInURL прокидывает partID из ссылки.


isDraftSavedStore

Стор для обратной совместимости с легаси кодом в ApplicationV2FileUploadComponent.

По дефолту true.

При загрузке файла компонент выставляет в false - и благодаря этому отображается сообщение

Чтобы завершить загрузку файла, сохрани черновик

После сохранения черновика стор выставляется обратно в true


event

Ивент в том виде, в каком приходит с бека АИС Таврида.

Если страница не упала в 404, он там точно будет.

От него обычно требуются ID и список форм.


eventForm

Форма заявки в том виде, в каком приходит с бека АИС Таврида.

Если страница не упала в 404, она там точно будет.

От нее требуются ID и список полей с настройками (например, для полей типа Загрузка файла или Список чекбоксов).


getEventPartsStore()

Возвращает стор с частями мероприятия.

Если стор не был создан при инициализации, создается, и возвращается.

Метод используется для блоков и полей заявки, где есть нужен список частей мероприятия.


eventParts

В этом поле могут быть, а могут и не быть части мероприятия.

Зависит от того, когда был создан стор.

к сведению

Чтобы в eventParts всегда гарантированно лежали части мероприятия, и стор был наполнен сразу при инициализации, нужно выполнить одно из условий:

  1. Сам ApplicationManager должен иметь в конструкторе this.isNeedsEventParts = true
  2. Один из блоков заявки должен иметь в конструкторе this.isNeedsEventParts = true
  3. Одно из полей одного из кастомных блоков должно иметь в конструкторе this.isNeedsEventParts = true

currentApplication

Текущая заявка (eventParticipant в АИС)

Нужна для ID и participantTypeID


agreementManager

Инстанс [AgreementManager]


creativeTaskManager

Инстанс [CreativeTaskManager]


getCreativeTaskStore?()

Опциональный метод. Используется в стратегии Ambassadors

Если есть - CreativeTaskManager считает приоритетным именно тот стор, который возвращается в этом методе.

Подробнее в [CreativeTaskManager]


getBgSuccessStore, getBgHeaderStore, getBgStickyStore

Это сторы, предоставляющие текущую картинку для экрана результатов, шапки и прогресс бара моб/планшет, в зависимости от настроек CMS и текущей ширины экрана.


getEventPartID

Метод получения текущей части мероприятия. Используется при инициализации. Обычно берет значение из ?part={partID}

currentEventPartIDStore

Стор string | null

Пока нужен только для чекбокса акселераторов.

setEventPartID

Метод установки текущей части мероприятия. Текущее поведение в некоторых стратегиях:

  1. Сетает в ?part={partID} через history.replaceState
  2. Сетает стор this.currentEventPartIDStore