refactor: `InstancesModal` to ts (#28474)
parent
a24c16f8fa
commit
1aad44bcd9
@ -1,21 +0,0 @@ |
||||
import { Box, Table } from '@rocket.chat/fuselage'; |
||||
import React, { memo } from 'react'; |
||||
|
||||
import DescriptionListEntry from './DescriptionListEntry'; |
||||
|
||||
const DescriptionList = ({ children, title, ...props }) => ( |
||||
<> |
||||
{title && ( |
||||
<Box display='flex' justifyContent='flex-end' width='30%' paddingInline='x8'> |
||||
{title} |
||||
</Box> |
||||
)} |
||||
<Table striped marginBlockEnd='x32' width='full' {...props}> |
||||
<Table.Body>{children}</Table.Body> |
||||
</Table> |
||||
</> |
||||
); |
||||
|
||||
export default Object.assign(memo(DescriptionList), { |
||||
Entry: DescriptionListEntry, |
||||
}); |
||||
@ -1,17 +0,0 @@ |
||||
import { Table } from '@rocket.chat/fuselage'; |
||||
import React, { memo } from 'react'; |
||||
|
||||
const style = { wordBreak: 'break-word' }; |
||||
|
||||
const DescriptionListEntry = ({ children, label, ...props }) => ( |
||||
<Table.Row {...props}> |
||||
<Table.Cell is='th' scope='col' align='end' color='hint' backgroundColor='surface' fontScale='p2m' style={style}> |
||||
{label} |
||||
</Table.Cell> |
||||
<Table.Cell align='start' color='default' style={style}> |
||||
{children} |
||||
</Table.Cell> |
||||
</Table.Row> |
||||
); |
||||
|
||||
export default memo(DescriptionListEntry); |
||||
@ -1,105 +0,0 @@ |
||||
import { Modal, Button, Accordion } from '@rocket.chat/fuselage'; |
||||
import { useTranslation } from '@rocket.chat/ui-contexts'; |
||||
import React from 'react'; |
||||
|
||||
import { useFormatDateAndTime } from '../../../hooks/useFormatDateAndTime'; |
||||
import DescriptionList from './DescriptionList'; |
||||
|
||||
const InstancesModal = ({ instances = [], onClose }) => { |
||||
const t = useTranslation(); |
||||
|
||||
const formatDateAndTime = useFormatDateAndTime(); |
||||
|
||||
return ( |
||||
<Modal width='x600'> |
||||
<Modal.Header> |
||||
<Modal.Title>{t('Instances')}</Modal.Title> |
||||
<Modal.Close onClick={onClose} /> |
||||
</Modal.Header> |
||||
<Modal.Content> |
||||
<Accordion> |
||||
{instances.map(({ address, broadcastAuth, currentStatus, instanceRecord }) => ( |
||||
<Accordion.Item title={address} key={address}> |
||||
<DescriptionList> |
||||
<DescriptionList.Entry label={t('Address')}>{address}</DescriptionList.Entry> |
||||
<DescriptionList.Entry label={t('Auth')}>{broadcastAuth ? 'true' : 'false'}</DescriptionList.Entry> |
||||
<DescriptionList.Entry |
||||
label={ |
||||
<> |
||||
{t('Current_Status')} > {t('Connected')} |
||||
</> |
||||
} |
||||
> |
||||
{currentStatus.connected ? 'true' : 'false'} |
||||
</DescriptionList.Entry> |
||||
<DescriptionList.Entry |
||||
label={ |
||||
<> |
||||
{t('Current_Status')} > {t('Local')} |
||||
</> |
||||
} |
||||
> |
||||
{currentStatus.local ? 'true' : 'false'} |
||||
</DescriptionList.Entry> |
||||
<DescriptionList.Entry |
||||
label={ |
||||
<> |
||||
{t('Current_Status')} > {t('Last_Heartbeat_Time')} |
||||
</> |
||||
} |
||||
> |
||||
{currentStatus.lastHeartbeatTime} |
||||
</DescriptionList.Entry> |
||||
<DescriptionList.Entry |
||||
label={ |
||||
<> |
||||
{t('Instance_Record')} > {t('ID')} |
||||
</> |
||||
} |
||||
> |
||||
{instanceRecord._id} |
||||
</DescriptionList.Entry> |
||||
<DescriptionList.Entry |
||||
label={ |
||||
<> |
||||
{t('Instance_Record')} > {t('PID')} |
||||
</> |
||||
} |
||||
> |
||||
{instanceRecord.pid} |
||||
</DescriptionList.Entry> |
||||
<DescriptionList.Entry |
||||
label={ |
||||
<> |
||||
{t('Instance_Record')} > {t('Created_at')} |
||||
</> |
||||
} |
||||
> |
||||
{formatDateAndTime(instanceRecord._createdAt)} |
||||
</DescriptionList.Entry> |
||||
<DescriptionList.Entry |
||||
label={ |
||||
<> |
||||
{t('Instance_Record')} > {t('Updated_at')} |
||||
</> |
||||
} |
||||
> |
||||
{formatDateAndTime(instanceRecord._updatedAt)} |
||||
</DescriptionList.Entry> |
||||
</DescriptionList> |
||||
</Accordion.Item> |
||||
))} |
||||
</Accordion> |
||||
</Modal.Content> |
||||
<Modal.Footer> |
||||
<Modal.FooterControllers> |
||||
<Button primary onClick={onClose}> |
||||
{t('Close')} |
||||
</Button> |
||||
</Modal.FooterControllers> |
||||
</Modal.Footer> |
||||
</Modal> |
||||
); |
||||
}; |
||||
|
||||
export default InstancesModal; |
||||
@ -0,0 +1,23 @@ |
||||
import { Box, Table, TableBody } from '@rocket.chat/fuselage'; |
||||
import type { ReactNode } from 'react'; |
||||
import React, { memo } from 'react'; |
||||
|
||||
type DescriptionListProps = { |
||||
children: ReactNode; |
||||
title?: string; |
||||
}; |
||||
|
||||
const DescriptionList = ({ children, title }: DescriptionListProps) => ( |
||||
<> |
||||
{title && ( |
||||
<Box display='flex' justifyContent='flex-end' width='30%' paddingInline='x8'> |
||||
{title} |
||||
</Box> |
||||
)} |
||||
<Table striped marginBlockEnd='x32' width='full'> |
||||
<TableBody>{children}</TableBody> |
||||
</Table> |
||||
</> |
||||
); |
||||
|
||||
export default memo(DescriptionList); |
||||
@ -0,0 +1,21 @@ |
||||
import { TableRow, TableCell } from '@rocket.chat/fuselage'; |
||||
import type { ReactNode } from 'react'; |
||||
import React, { memo } from 'react'; |
||||
|
||||
type DescriptionListEntryProps = { |
||||
label: ReactNode; |
||||
children: ReactNode; |
||||
}; |
||||
|
||||
const DescriptionListEntry = ({ children, label }: DescriptionListEntryProps) => ( |
||||
<TableRow> |
||||
<TableCell wordBreak='break-word' is='th' scope='col' align='end' color='hint' backgroundColor='surface' fontScale='p2m'> |
||||
{label} |
||||
</TableCell> |
||||
<TableCell align='start' color='default'> |
||||
{children} |
||||
</TableCell> |
||||
</TableRow> |
||||
); |
||||
|
||||
export default memo(DescriptionListEntry); |
||||
@ -0,0 +1,92 @@ |
||||
import type { Serialized } from '@rocket.chat/core-typings'; |
||||
import { Accordion } from '@rocket.chat/fuselage'; |
||||
import type { IInstance } from '@rocket.chat/rest-typings'; |
||||
import { useTranslation } from '@rocket.chat/ui-contexts'; |
||||
import React from 'react'; |
||||
|
||||
import GenericModal from '../../../../components/GenericModal'; |
||||
import { useFormatDateAndTime } from '../../../../hooks/useFormatDateAndTime'; |
||||
import DescriptionList from './DescriptionList'; |
||||
import DescriptionListEntry from './DescriptionListEntry'; |
||||
|
||||
type InstancesModalProps = { |
||||
instances: Serialized<IInstance>[]; |
||||
onClose: () => void; |
||||
}; |
||||
|
||||
const InstancesModal = ({ instances = [], onClose }: InstancesModalProps) => { |
||||
const t = useTranslation(); |
||||
const formatDateAndTime = useFormatDateAndTime(); |
||||
|
||||
return ( |
||||
<GenericModal onConfirm={onClose} confirmText={t('Close')} icon={null} title={t('Instances')} onClose={onClose}> |
||||
<Accordion> |
||||
{instances.map(({ address, broadcastAuth, currentStatus, instanceRecord }) => ( |
||||
<Accordion.Item defaultExpanded title={address} key={address}> |
||||
<DescriptionList> |
||||
<DescriptionListEntry label={t('Address')}>{address}</DescriptionListEntry> |
||||
<DescriptionListEntry label={t('Auth')}>{broadcastAuth ? 'true' : 'false'}</DescriptionListEntry> |
||||
<DescriptionListEntry |
||||
label={ |
||||
<> |
||||
{t('Current_Status')} > {t('Connected')} |
||||
</> |
||||
} |
||||
> |
||||
{currentStatus.connected ? 'true' : 'false'} |
||||
</DescriptionListEntry> |
||||
<DescriptionListEntry |
||||
label={ |
||||
<> |
||||
{t('Current_Status')} > {t('Local')} |
||||
</> |
||||
} |
||||
> |
||||
{currentStatus.local ? 'true' : 'false'} |
||||
</DescriptionListEntry> |
||||
<DescriptionListEntry |
||||
label={ |
||||
<> |
||||
{t('Current_Status')} > {t('Last_Heartbeat_Time')} |
||||
</> |
||||
} |
||||
> |
||||
{currentStatus.lastHeartbeatTime} |
||||
</DescriptionListEntry> |
||||
<DescriptionListEntry label={<>{t('Instance_Record')} > ID</>}>{instanceRecord?._id}</DescriptionListEntry> |
||||
<DescriptionListEntry |
||||
label={ |
||||
<> |
||||
{t('Instance_Record')} > {t('PID')} |
||||
</> |
||||
} |
||||
> |
||||
{instanceRecord?.pid} |
||||
</DescriptionListEntry> |
||||
<DescriptionListEntry |
||||
label={ |
||||
<> |
||||
{t('Instance_Record')} > {t('Created_at')} |
||||
</> |
||||
} |
||||
> |
||||
{formatDateAndTime(instanceRecord?._createdAt)} |
||||
</DescriptionListEntry> |
||||
<DescriptionListEntry |
||||
label={ |
||||
<> |
||||
{t('Instance_Record')} > {t('Updated_at')} |
||||
</> |
||||
} |
||||
> |
||||
{formatDateAndTime(instanceRecord?._updatedAt)} |
||||
</DescriptionListEntry> |
||||
</DescriptionList> |
||||
</Accordion.Item> |
||||
))} |
||||
</Accordion> |
||||
</GenericModal> |
||||
); |
||||
}; |
||||
|
||||
export default InstancesModal; |
||||
@ -0,0 +1 @@ |
||||
export { default } from './InstancesModal'; |
||||
Loading…
Reference in new issue