import { ChangeEvent, useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { PATHS } from '@/shared/constants/paths'; import { useNavigate } from '@/shared/lib/hooks/use-navigate'; import { HeaderType } from '@/entities/common/model/types'; import { useSetHeaderTitle, useSetHeaderType, useSetFooterMode, useSetOnBack } from '@/widgets/sub-layout/use-sub-layout'; import { useExtensionListMutation } from '@/entities/additional-service/api/use-extension-list-mutation'; import { ExtensionListParams, ExtensionListResponse, SERVICE_MAP } from '@/entities/additional-service/model/types'; import { useStore } from '@/shared/model/store'; import { Dialog } from '@/shared/ui/dialogs/dialog'; import { FilterSelectMid } from '@/shared/ui/filter/select-mid'; export const ListPage = () => { const { t } = useTranslation(); const { navigate } = useNavigate(); const midOptions = useStore.getState().UserStore.selectOptionsMids; const userMid = useStore.getState().UserStore.mid; const midOptionsWithoutGids = useStore.getState().UserStore.selectOptionsMidsWithoutGids; const [mid, setMid] = useState(userMid); const [activeServices, setActiveServices] = useState([]); const [availableServices, setAvailableServices] = useState([]); const [dialogOpen, setDialogOpen] = useState(false); const { mutateAsync: extensionList } = useExtensionListMutation(); useSetHeaderTitle(t('additionalService.title')); useSetHeaderType(HeaderType.LeftArrow); useSetFooterMode(false); useSetOnBack(() => { navigate(PATHS.home); }); const callExtensionList = () => { let params: ExtensionListParams = { mid: mid } extensionList(params).then((rs: ExtensionListResponse) => { setActiveServices(rs.activeExtensionList || []); setAvailableServices(rs.availableExtensionList || []); }); }; const getSelectMidOptions = () => { let rs = []; let options = midOptionsWithoutGids; for (let i = 0; i < options.length; i++) { rs.push( ); } return rs; }; const onChangeMidSelect = (val: string) => { setMid(val); }; const getActiveExtensionList = () => { const filteredServices = SERVICE_MAP.filter(service => activeServices.includes(service.code) ); return filteredServices.map((service) => (
service.path && navigate(service.path)} >
{t(service.serviceNameKey)}

{t(service.serviceDescKey)}

{t(service.serviceNameKey)}
)); }; const getAvailableExtensionList = () => { const filteredServices = SERVICE_MAP.filter(service => availableServices.includes(service.code) ); return filteredServices.map((service) => (
setDialogOpen(true)} >
{t(service.serviceNameKey)}

{t(service.serviceDescKey)}

{t(service.serviceNameKey)}
)); }; useEffect(() => { if (!!mid) { callExtensionList(); } }, [mid]); return ( <>

{t('additionalService.activeServices')}

{getActiveExtensionList()}

{t('additionalService.availableServices')}

{getAvailableExtensionList()}
setDialogOpen(false)} message={ <> {t('additionalService.notActiveServiceMessage')}
{t('additionalService.contactSalesMessage').split('\n').map((line, index) => ( {line} {index < t('additionalService.contactSalesMessage').split('\n').length - 1 &&
}
))} } buttonLabel={[t('common.confirm')]} onConfirmClick={() => setDialogOpen(false)} afterLeave={() => { }} /> ) };