fix(назначение звонка): TEAMMSBDAY-2340 [ОНБ_МСБ] убирает full route

This commit is contained in:
akondratov
2025-07-23 12:41:50 +03:00
parent 1436c85846
commit 290e4d0ba6
128 changed files with 82 additions and 321 deletions
@@ -1,6 +1,6 @@
import type { CommonOnboardingContextFractal } from 'actions-fractal';
import type { SaveResponseWithRawValidationResults } from 'interfaces';
import type { ShortOnboardingRequestDto } from 'pages/onboarding-short-new/interfaces';
import type { ShortOnboardingRequestDto } from 'pages/onboarding-short/interfaces';
import type { IOnboardingShortClientService } from 'services/onboarding-short-client';
import type { IActionConfig } from '@platform/core';
import { singleAction, to } from '@platform/core';
+1 -1
View File
@@ -1,7 +1,7 @@
import type { CommonOnboardingContext } from 'actions-fractal';
import type { ICreateRequestParams } from 'interfaces';
import { ASYNC_TASK_STATUS, type AsyncTaskDto } from 'interfaces';
import type { ShortOnboardingRequestDto } from 'pages/onboarding-short-new/interfaces';
import type { ShortOnboardingRequestDto } from 'pages/onboarding-short/interfaces';
import type { IOnboardingShortClientService } from 'services/onboarding-short-client';
import { createRequestFatalHandler } from 'utils';
import type { IActionConfig } from '@platform/core';
+2 -2
View File
@@ -1,10 +1,10 @@
import type { OnboardingShortRequestBankScrollerDto } from 'interfaces/admin';
import type { ShortOnboardingRequestDto } from 'pages/onboarding-short-new/interfaces';
import type { ShortOnboardingRequestDto } from 'pages/onboarding-short/interfaces';
import { open as openAction } from '@platform/services';
/**
* Функция открытия короткой заявки в режиме просмотра. (Базовая функция).
*/
export const openShortView = openAction(
({ id }: OnboardingShortRequestBankScrollerDto | ShortOnboardingRequestDto) => `/onboarding-short/full/view/${id}`
({ id }: OnboardingShortRequestBankScrollerDto | ShortOnboardingRequestDto) => `/onboarding-short/view/${id}`
);
+1 -1
View File
@@ -1,6 +1,6 @@
import type { CommonOnboardingContext } from 'actions-fractal';
import type { SaveResponseWithRawValidationResults } from 'interfaces';
import type { ShortOnboardingRequestDto } from 'pages/onboarding-short-new/interfaces';
import type { ShortOnboardingRequestDto } from 'pages/onboarding-short/interfaces';
import type { IOnboardingShortClientService } from 'services/onboarding-short-client';
import type { IActionConfig } from '@platform/core';
import { singleAction, to } from '@platform/core';
+5 -13
View File
@@ -6,7 +6,6 @@ import { StreamLoader } from '@platform/services';
import { GuardRoute } from '@platform/services/client';
const ScrollerPage = lazy(() => import('pages/scroller/admin'));
const SelectOrganizationPage = lazy(() => import('pages/select-organization-fractal'));
const ManageRequestPage = lazy(() => import('pages/admin/manage-request'));
const FormPage = lazy(() => import('pages/form-fractal'));
const ArchiveRequest = lazy(() => import('pages/admin/archive-request'));
@@ -22,42 +21,35 @@ export const AdminRoutes: React.FC = () => (
exact
authority={[AUTHORITIES_ONBOARDING_BANK.VIEW]}
component={ScrollerPage}
path={'/onboarding-short/full'}
/>
<GuardRoute
key="select-organization-page"
exact
authority={[AUTHORITIES_ONBOARDING_BANK.CREATE]}
component={SelectOrganizationPage}
path={'/onboarding-short/full/new'}
path={'/onboarding-short'}
/>
<GuardRoute
key="manage-request"
exact
authority={[AUTHORITIES_ONBOARDING_BANK.MANAGE]}
component={ManageRequestPage}
path={'/onboarding-short/full/manage/:id'}
path={'/onboarding-short/manage/:id'}
/>
<GuardRoute
key="onboarding-form"
exact
authority={[AUTHORITIES_ONBOARDING_BANK.UPDATE]}
component={FormPage}
path={'/onboarding-short/full/:id'}
path={'/onboarding-short/:id'}
/>
<GuardRoute
key="onboarding-form-view"
exact
authority={[AUTHORITIES_ONBOARDING_BANK.VIEW]}
component={() => <FormPage isView />}
path={'/onboarding-short/full/view/:id'}
path={'/onboarding-short/view/:id'}
/>
<GuardRoute
key="archive-request"
exact
authority={[AUTHORITIES_ONBOARDING_BANK.VIEW_ARCHIVE]}
component={ArchiveRequest}
path={'/onboarding-short/full/archive/:id'}
path={'/onboarding-short/archive/:id'}
/>
{/* <GuardRoute */}
{/* key="qrc-commission" */}
+32 -48
View File
@@ -1,59 +1,43 @@
import type { FC } from 'react';
import React, { lazy, Suspense } from 'react';
import { FormSkeletonPage } from 'components';
import { ModalContextProvider } from 'components/modal-context-fractal';
import FormPage from 'pages/form-fractal';
import OnboardingShortNew from 'pages/onboarding-short-new';
import SelectOrganizationPage from 'pages/select-organization-fractal';
import SelectOrganizationPageShort from 'pages/select-organization-short-fractal';
// import { SelectOrganizationForm } from 'pages/select-organization-short-fractal/form';
import { Route, Switch } from 'react-router-dom';
import { Switch } from 'react-router-dom';
import { AUTHORITIES_ONBOARDING_CLIENT } from 'stream-constants';
import { checkRouteAvailability, useAuth } from '@platform/services';
import { GuardRoute, StreamLoader } from '@platform/services/client';
const LongShortAppealNav = lazy(() => import('pages/long-short-appeal-nav'));
const SelectOrganizationPageShort = lazy(() => import('pages/select-organization-short'));
const OnboardingShortNew = lazy(() => import('pages/onboarding-short'));
/** Общий контейнер для клиентских роутов. */
export const ClientRoutes: FC = () => {
const { authorities = [] } = useAuth();
// const { isFromOnboardingExternal } = useUrlParamsParse();
const hasCreateRequestAuthority = checkRouteAvailability([AUTHORITIES_ONBOARDING_CLIENT.CREATE], authorities);
return (
<ModalContextProvider>
<Suspense fallback={StreamLoader}>
<Switch>
<Route
key="select-organization-page"
exact
component={hasCreateRequestAuthority ? SelectOrganizationPage : FormSkeletonPage}
path={'/onboarding-short/full/new'}
/>
<GuardRoute
key="onboarding-form"
exact
authority={[AUTHORITIES_ONBOARDING_CLIENT.UPDATE]}
component={FormPage}
path={'/onboarding-short/full/:id'}
/>
<Route key="onboarding-short-nav" component={LongShortAppealNav} path={'/onboarding-short/navigate'} />
<Route key="onboarding-short-new" component={() => <SelectOrganizationPageShort />} path={'/onboarding-short/new'} />
<Route key="onboarding-short-edit" component={OnboardingShortNew} path={'/onboarding-short/:id'} />
{/* <Route key="onboarding-short-new" component={() => <OnboardingShortForm />} path={'/onboarding-short/:id'} /> */}
{/* <Route */}
{/* key="onboarding-short" */}
{/* exact */}
{/* component={() => <MainLayout>test</MainLayout>} */}
{/* path={'/onboarding-short'} */}
{/* /> */}
</Switch>
</Suspense>
</ModalContextProvider>
);
};
export const ClientRoutes: FC = () => (
<ModalContextProvider>
<Suspense fallback={StreamLoader}>
<Switch>
<GuardRoute
key="onboarding-short-nav"
exact
authority={[AUTHORITIES_ONBOARDING_CLIENT.CREATE]}
component={LongShortAppealNav}
path={'/onboarding-short/navigate'}
/>
<GuardRoute
key="onboarding-short-new"
exact
authority={[AUTHORITIES_ONBOARDING_CLIENT.CREATE]}
component={() => <SelectOrganizationPageShort />}
path={'/onboarding-short/new'}
/>
<GuardRoute
key="onboarding-short-edit"
exact
authority={[AUTHORITIES_ONBOARDING_CLIENT.CREATE]}
component={OnboardingShortNew}
path={'/onboarding-short/:id'}
/>
</Switch>
</Suspense>
</ModalContextProvider>
);
ClientRoutes.displayName = 'ClientRoutes';
+1 -1
View File
@@ -1,4 +1,4 @@
import type { ShortOnboardingRequestDto } from 'pages/onboarding-short-new/interfaces';
import type { ShortOnboardingRequestDto } from 'pages/onboarding-short/interfaces';
import type { UseQueryOptions } from 'react-query';
import { useQuery } from 'react-query';
import { onboardingShortClientService } from 'services/onboarding-short-client';
@@ -1,4 +1,4 @@
import type { ScheduledCallInfoDto } from 'pages/scheduled-call-info/interfaces';
import type { ScheduledCallInfoDto } from 'pages/onboarding-short/form-steps/call-schedule/interfaces';
import type { STATUS, REQUEST_STEP, SIGN_PLACE, LIMIT_SCHEME_CODE } from 'stream-constants';
import type { UserType, DOCUMENT_TYPE_CODE, ACCOUNT_TYPE } from '@platform/services';
import type { AccountInfoDto } from './account-info-dto';
-2
View File
@@ -325,8 +325,6 @@ export const FormPageContent: React.FC<IFormPage> = ({ isView }) => {
}
}
console.log(doc);
const formInitialValues = useMemo(() => (doc ? getFormInitialValues(doc) : {}), [doc]);
if ((!doc && !isDocLoading) || isError) {
-2
View File
@@ -1,2 +0,0 @@
// export {Step1 as default} from './step1'
export { default } from './form';
-100
View File
@@ -1,100 +0,0 @@
/* eslint-disable @eco/no-missing-localization */
import React from 'react';
import { Modal } from '@fractal-ui/overlays';
import { LayoutDocument, SnackbarProvider } from 'components';
import SideSteps from 'components/stepper-fractal/side-steps';
import { PageContextProvider } from 'pages/select-organization-fractal/context';
import { MainLayout } from '@platform/services/client';
import { Box, Gap, Horizon, Icons, Typography } from '@platform/ui';
const SectionButton = ({ icon, title, description, onClick }: { icon: string; title: string; description: string; onClick(): void }) => (
<Box onClick={onClick}>
<Box>
<Icons.Account name={icon} />
<Typography.H3>{title}</Typography.H3>
</Box>
<Typography.P>{description}</Typography.P>
</Box>
);
export const FormDialog: React.FC = () => {
// Заглушка для навигации - реализуйте реальную логику маршрутизации
const handleShortClick = () => {
console.log('Переключение на Короткую версию');
// Реализуйте навигацию по роуту краткой версии
};
const handleStandardClick = () => {
console.log('Переключение на Стандартную версию');
// Реализуйте навигацию по роуту стандартной версии
};
return (
<Modal isOpen header={'Выбор типа формы'} width="600px" onClose={() => {}}>
<Gap.SM />
<Horizon align={'TOP'}>
{/* Раздел Короткая */}
<SectionButton
description="Быстрый вариант для простых задач и минимальных данных"
icon="document"
title="Короткая"
onClick={handleShortClick}
/>
{/* Раздел Стандартная */}
<SectionButton
description="Полный функционал с расширенными настройками и проверками"
icon="settings"
title="Стандартная"
onClick={handleStandardClick}
/>
</Horizon>
</Modal>
);
};
export const Step1 = () => {
const isLoading = false;
// useEffect(() => {
// (async () => {
// dialog.show('showChooseAppealType', FormDialog, {
// onContinue: () => {
// }
// }, () => () => (true));
// })()
// }, []);
return (
<SnackbarProvider>
<PageContextProvider>
<MainLayout>
<LayoutDocument
breadcrumbs={[
{
text: 'lol',
onClick() {
return;
},
},
]}
documentStatus={
<SideSteps />
// isLoading ? (
// <Stepper accountTypeCode={ACCOUNT_TYPE.CHECKING } currentStep={REQUEST_STEP.ACCOUNTS}
// userType={UserType.CLIENT}/>
// ) : (
// <FormStepper/>
// )
}
isLoading={isLoading}
title={'lol'}
>
{/* <Tariff /> */}
</LayoutDocument>
</MainLayout>
</PageContextProvider>
</SnackbarProvider>
);
};
@@ -1,22 +0,0 @@
import React from 'react';
import type { ButtonProps } from '@fractal-ui/core';
import { Button } from '@fractal-ui/core';
import { useBreakpoints } from '@fractal-ui/styling';
import { locale } from 'localization';
import { ACTIONS } from '@platform/ui';
import type { ConfirmButtonProps } from './interfaces';
/** Кнопка подтверждения модального окна для клиентской части. */
export const ConfirmButtonClient: React.FC<ConfirmButtonProps> = ({ onClose }) => {
const { XS } = useBreakpoints();
const commonProps: Partial<ButtonProps> = { size: XS ? 'M' : 'L', width: XS ? '100%' : undefined };
return (
<Button {...commonProps} dataAction={ACTIONS.CLOSE} onClick={onClose}>
{locale.action.good}
</Button>
);
};
ConfirmButtonClient.displayName = 'ConfirmButtonClient';
@@ -1,57 +0,0 @@
import React, { useCallback } from 'react';
import type { ModalButtonProps } from '@fractal-ui/overlays';
import { StatusModal } from '@fractal-ui/overlays';
import { Text, Title, useBreakpoints } from '@fractal-ui/styling';
import { useModalContext } from 'components/modal-context-fractal';
import { locale } from 'localization';
import { ACTIONS } from '@platform/ui';
import type { ConfirmModalProps } from './interfaces';
/** Модальное окно "Подтверждение назначение звонка". */
const ConfirmModal: React.FC<ConfirmModalProps> = ({ onClose, ...statusModalProps }) => {
const { XS } = useBreakpoints();
const actions: ModalButtonProps[] = [
{
onClick: onClose,
text: locale.action.scheduleMeeting,
dataAction: ACTIONS.CLOSE,
size: XS ? 'M' : 'L',
width: XS ? '100%' : undefined,
},
{
onClick: onClose,
text: locale.action.waitingCall,
dataAction: 'cancel',
isLink: true,
size: XS ? 'M' : 'L',
width: XS ? '100%' : undefined,
},
];
return (
<StatusModal preventSimpleClose size={'M'} type={'success'} {...statusModalProps} actions={actions}>
<Title.H2 color={'text.primary'} marginBottom={'3'}>
Сотрудник банка позвонит вам
<br />
30 сентября c 16:00 до 17:00
</Title.H2>
<Text.P2 color={'text.secondary'} marginBottom={'5'}>
Во время звонка держите под рукой паспорта всех подписантов и учредительные документы организации, а также подготовьтесь включить
видеозвонок при необходимости
</Text.P2>
<Text.P2 color={'text.secondary'}>
Вам так же доступна возможность назначить встречу, которая будет необходима для открытия счёта
</Text.P2>
</StatusModal>
);
};
ConfirmModal.displayName = 'ConfirmModal';
/** Хук модального окна "Подтверждение назначение звонка". */
export const useConfirmModal = () => {
const { showModal } = useModalContext();
return useCallback(() => showModal(ConfirmModal, {}), [showModal]);
};
@@ -1,14 +0,0 @@
import type { ComponentProps } from 'react';
import type { StatusModal } from '@fractal-ui/overlays';
/** Типы пропсов модального окна "Подтверждение назначение звонка". */
export interface ConfirmModalProps extends Omit<ComponentProps<typeof StatusModal>, 'actions'> {
/** Метод кнопки отмены. */
onCancel?(): void;
/** Метод закрытия модального окна. */
onClose(): void;
}
/** Параметры кнопки подтверждения. */
export type ConfirmButtonProps = Pick<ConfirmModalProps, 'onClose'>;
@@ -1,10 +1,10 @@
import type { AnyObject } from 'final-form';
import type { ISelectOrganizationForm } from 'interfaces';
import { locale } from 'localization';
import { getScheduledCallInfoValidation } from 'pages/onboarding-short/form-steps/call-schedule/validation';
import { validateOrganizationForm } from 'pages/organization-ip-fractal/validation';
import { getOrganizationUlFormValidation } from 'pages/organization-ul-fractal/validation';
import { getProductsFormValidation } from 'pages/products/validation';
import { getScheduledCallInfoValidation } from 'pages/scheduled-call-info/validation';
/**
* Информация о шаге заявки.
@@ -33,7 +33,7 @@ interface ContentProps {
}
/** Содержимое формы заявки на открытие первого счёта. */
export const ContentOld: React.FC<ContentProps & FormRenderProps<IShortOnboardingRequestForm>> = ({
export const Content: React.FC<ContentProps & FormRenderProps<IShortOnboardingRequestForm>> = ({
isLoading,
handleSubmit,
breadCrumbs,
@@ -310,4 +310,4 @@ export const ContentOld: React.FC<ContentProps & FormRenderProps<IShortOnboardin
);
};
ContentOld.displayName = 'Content';
Content.displayName = 'Content';
@@ -1,7 +1,7 @@
import type { FC } from 'react';
import React, { useCallback } from 'react';
import { useShortOnboardingFormContext } from 'pages/onboarding-short-new/context';
import type { IShortOnboardingRequestForm } from 'pages/onboarding-short-new/interfaces';
import { useShortOnboardingFormContext } from 'pages/onboarding-short/context';
import type { IShortOnboardingRequestForm } from 'pages/onboarding-short/interfaces';
import type { FormSpyRenderProps } from 'react-final-form';
import { FormSpy, useField, useForm } from 'react-final-form';
import { getRequestFieldName } from 'utils';
@@ -1,8 +1,8 @@
import { ScheduledCallInfo } from '../scheduled-call-info';
import OrganizationFormIp from './components/organization-ip-fractal';
import OrganizationFormUl from './components/organization-ul-fractal';
import { REQUEST_STEP } from './constants';
import { Tariff } from './views/tariff';
import { ScheduledCallInfo } from './form-steps/call-schedule';
import OrganizationFormIp from './form-steps/data-client/organization-ip-fractal';
import OrganizationFormUl from './form-steps/data-client/organization-ul-fractal';
import { Tariff } from './form-steps/tariff';
// const OrganizationFormIp = lazy(() => import('../organization-ip-fractal'));
// const OrganizationFormUl = lazy(() => import('../organization-ul-fractal'));
@@ -6,7 +6,7 @@ import { Wrapper } from 'components';
import { useOnboardingFormContext } from 'context';
import type { PersonDto } from 'interfaces';
import { locale } from 'localization';
import { SignerField } from 'pages/onboarding-short-new/components/account-access/signer-field';
import { SignerField } from 'pages/onboarding-short/form-steps/data-client/account-access/signer-field';
import { formFields } from 'pages/open-account-fractal/constants';
import { useField, useForm } from 'react-final-form';
import { FieldArray } from 'react-final-form-arrays';
@@ -1,6 +1,6 @@
import React from 'react';
import { Wrapper } from 'components';
import { Signers } from 'pages/onboarding-short-new/components/account-access/signers';
import { Signers } from 'pages/onboarding-short/form-steps/data-client/account-access/signers';
/**
* Форма "Данные предпринимателя".
@@ -1,7 +1,7 @@
import React from 'react';
import { Wrapper } from 'components';
import { Signers } from 'pages/onboarding-short/form-steps/data-client/account-access/signers';
import { ROLE_OF_INDIVIDUALS, ROLE_OF_ORGANIZATIONS } from 'stream-constants';
import { Signers } from '../account-access/signers';
import { Leader } from './views/leader';
import { ManagementCompany } from './views/management-company/management-company';
import { ManagingIe } from './views/managing-ie/managing-ie';
@@ -1,7 +1,7 @@
import { useCallback } from 'react';
import { useConfirmModal } from 'components';
import { locale } from 'localization';
import type { IHookAction } from '../../../actions-fractal/interfaces';
import type { IHookAction } from '../../../../../../actions-fractal/interfaces';
/** Статусы, при которых доступна функция отмена заявки. */
@@ -1,9 +1,9 @@
import React from 'react';
import { useDoc } from 'hooks';
import { DocumentsFormedPageFractal } from 'pages/documents-formed-fractal';
import { ResultClientViewCallWaiting } from 'pages/result-client-view-call-waiting';
import { ResultClientViewRejected } from 'pages/result-client-view-rejected';
import { ResultClientViewWaitingRestriction } from 'pages/result-client-view-waiting-restriction';
import { ResultClientViewCallWaiting } from 'pages/onboarding-short/form-steps/result-client-view/call-waiting';
import { ResultClientViewRejected } from 'pages/onboarding-short/form-steps/result-client-view/rejected';
import { ResultClientViewWaitingRestriction } from 'pages/onboarding-short/form-steps/result-client-view/waiting-restriction';
import { StatusAccountsOpenedPageFractal } from 'pages/status-accounts-opened-fractal';
import { StatusApprovedPageFractal } from 'pages/status-approved-fractal';
import { APPROVED_STATUSES, IN_PROGRESS_STATUSES, STATUS } from 'stream-constants';
@@ -12,7 +12,7 @@ import { useDocContainStatus, useDocQueryMetadata, useGoToScroller, useShortDoc
import type { IOnboardingAppConfigAdmin } from 'interfaces';
import { locale } from 'localization';
import { getIsResultViewStatus } from 'pages/form-fractal/utils';
import { ResultClientView } from 'pages/result-client-view';
import { ResultClientView } from 'pages/onboarding-short/form-steps/result-client-view';
import { useQueryClient } from 'react-query';
import type { IOnboardingShortClientService } from 'services/onboarding-short-client';
import { FORM_FIELDS, FORM_SUBMIT_TYPE, STATUS } from 'stream-constants';
@@ -37,7 +37,7 @@ import css from '../form-fractal/styles.scss';
import { FormSkeleton } from './components/skeleton';
import { getFormValidatorIp, getFormValidatorUl, REQUEST_STEP } from './constants';
import { ContentOld as Content } from './content-old';
import { Content as Content } from './content';
import { ShortOnboardingFormContext } from './context';
import { useIsReadOnly } from './hooks/use-is-readonly';
import type { IShortOnboardingRequestForm, OnboardingFormContextProps, ShortOnboardingRequestDto } from './interfaces';
@@ -144,8 +144,6 @@ export const FormPageContent: React.FC<IFormPage> = ({ isView }) => {
try {
setIsLoading(true);
await new Promise(resolve => setTimeout(resolve, 5000));
const saveAndShowErrors = async () => {
const result = await saveDocument(values);
+1
View File
@@ -0,0 +1 @@
export { default } from './form';
@@ -16,7 +16,7 @@ import type {
TravelBusinessDto,
} from 'interfaces';
import { TYPE_OF_IDENTITY_DOCUMENT } from 'interfaces';
import type { IShortOnboardingRequestForm, ShortOnboardingRequestDto } from 'pages/onboarding-short-new/interfaces';
import type { IShortOnboardingRequestForm, ShortOnboardingRequestDto } from 'pages/onboarding-short/interfaces';
import { OTHER_PERSON_VALUE } from 'pages/products/constants';
import type { STATUS } from 'stream-constants';
import { ACQUIRING_CONTACT_OTHER_PERSON, LIMIT_SCHEME_CODE, PERIOD, ROLE_OF_INDIVIDUALS } from 'stream-constants';
@@ -9,8 +9,8 @@ import type {
QuestionnaireOfficialFormsIPDto,
TaxResidentJurisdictionDto,
} from 'interfaces';
import { REQUEST_STEP } from 'pages/onboarding-short-new/constants';
import type { IShortOnboardingRequestForm, ShortOnboardingRequestDto } from 'pages/onboarding-short-new/interfaces';
import { REQUEST_STEP } from 'pages/onboarding-short/constants';
import type { IShortOnboardingRequestForm, ShortOnboardingRequestDto } from 'pages/onboarding-short/interfaces';
import { OTHER_PERSON_VALUE } from 'pages/products/constants';
import { ACQUIRING_CONTACT_OTHER_PERSON, FORM_SUBMIT_TYPE, LIMIT_SCHEME_CODE, ROLE_OF_INDIVIDUALS } from 'stream-constants';
import {
@@ -1,4 +1,4 @@
import type { STATUS } from 'pages/onboarding-short-new/status';
import type { STATUS } from 'pages/onboarding-short/status';
import { isClientScope } from '@platform/services';
import { REQUEST_STEP } from '../constants';

Some files were not shown because too many files have changed in this diff Show More