Редактирование заявок у конкретного пользователя (#14)
Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz> Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/14
This commit was merged in pull request #14.
This commit is contained in:
@@ -33,9 +33,29 @@ export interface IResolveRouteParams {
|
||||
departmentId: string;
|
||||
}
|
||||
|
||||
export interface IManageByUserRouteParams {
|
||||
/** Email выбранного сотрудника — он однозначно определяет весь экран (обе панели). */
|
||||
userEmail: string;
|
||||
/**
|
||||
* На кого заменять. Часть ссылки, а не только состояние экрана: замена обычно
|
||||
* идёт в несколько приёмов (сначала заявки, потом маршруты, потом что-то
|
||||
* отдельной строкой), и выбранного «получателя» незачем терять между ними.
|
||||
* Пусто — получатель ещё не выбран.
|
||||
*/
|
||||
targetEmail: string;
|
||||
}
|
||||
|
||||
export interface IManageRequestRouteParams {
|
||||
requestTypeId: string;
|
||||
requestId: string;
|
||||
/**
|
||||
* Партиция (список-архив данных), где физически лежит заявка — у разных
|
||||
* партиций независимая нумерация Id (см. ТЗ по архивации), поэтому без
|
||||
* listId requestId неоднозначен. Пусто — старая ссылка (до архивации) или
|
||||
* ссылка ещё не резолвнута; тогда экран считает, что заявка в текущей
|
||||
* партиции (см. ManageRequestsScreen).
|
||||
*/
|
||||
listId: string;
|
||||
}
|
||||
|
||||
export interface IAdminRoute {
|
||||
@@ -53,18 +73,21 @@ export interface IAdminRoute {
|
||||
resolve?: IResolveRouteParams;
|
||||
/** Задан только при tab='manageRequests' и непустых requestTypeId+requestId. */
|
||||
manage?: IManageRequestRouteParams;
|
||||
/** Задан только при tab='manageByUser' и непустом userEmail. */
|
||||
manageByUser?: IManageByUserRouteParams;
|
||||
}
|
||||
|
||||
const ROUTE_CHANGE_EVENT = 'aa-route-change';
|
||||
|
||||
// 'routeSteps' сюда намеренно не входит — это не отдельная вкладка URL, а
|
||||
// состояние вкладки 'routes' при наличии aaroute (см. parseRoute).
|
||||
const TABS: ScreenKey[] = ['dashboard', 'requestTypes', 'routes', 'resolve', 'manageRequests'];
|
||||
const TABS: ScreenKey[] = ['dashboard', 'requestTypes', 'routes', 'resolve', 'manageRequests', 'manageByUser'];
|
||||
|
||||
const PARAM_KEYS = [
|
||||
'aatab', 'aaroute', 'aarfilter',
|
||||
'aartype', 'aauser', 'aaproject', 'aaprojectname', 'aastatus', 'aafields', 'aadept',
|
||||
'aamtype', 'aamreq'
|
||||
'aamtype', 'aamreq', 'aamlist',
|
||||
'aabuser', 'aabtarget'
|
||||
];
|
||||
|
||||
// raw — результат URLSearchParams.get() (DOM API, возвращает string | null).
|
||||
@@ -114,15 +137,20 @@ export function parseRoute(search: string = window.location.search): IAdminRoute
|
||||
const manageReqId = params.get('aamreq');
|
||||
const manage: IManageRequestRouteParams | undefined =
|
||||
tab === 'manageRequests' && manageTypeId && manageReqId
|
||||
? { requestTypeId: manageTypeId, requestId: manageReqId }
|
||||
? { requestTypeId: manageTypeId, requestId: manageReqId, listId: params.get('aamlist') || '' }
|
||||
: undefined;
|
||||
|
||||
const byUserEmail = tab === 'manageByUser' ? params.get('aabuser') : null;
|
||||
|
||||
return {
|
||||
tab,
|
||||
routeId: routeId && !isNaN(routeId) ? routeId : undefined,
|
||||
routesFilter: (tab === 'routes' ? params.get('aarfilter') : null) || undefined,
|
||||
resolve,
|
||||
manage
|
||||
manage,
|
||||
manageByUser: byUserEmail
|
||||
? { userEmail: byUserEmail, targetEmail: params.get('aabtarget') || '' }
|
||||
: undefined
|
||||
};
|
||||
}
|
||||
|
||||
@@ -152,6 +180,12 @@ function buildQuery(route: IAdminRoute): string {
|
||||
if (route.tab === 'manageRequests' && route.manage && route.manage.requestTypeId && route.manage.requestId) {
|
||||
params.set('aamtype', route.manage.requestTypeId);
|
||||
params.set('aamreq', route.manage.requestId);
|
||||
if (route.manage.listId) params.set('aamlist', route.manage.listId);
|
||||
}
|
||||
|
||||
if (route.tab === 'manageByUser' && route.manageByUser?.userEmail) {
|
||||
params.set('aabuser', route.manageByUser.userEmail);
|
||||
if (route.manageByUser.targetEmail) params.set('aabtarget', route.manageByUser.targetEmail);
|
||||
}
|
||||
|
||||
const query = params.toString();
|
||||
|
||||
Reference in New Issue
Block a user