src/app/shared/resizeDetailsList/dialog.tsx (54 lines of code) (raw):

/*********************************************************** * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License **********************************************************/ import * as React from 'react'; import { useTranslation } from 'react-i18next'; import { DefaultButton, Dialog, DialogFooter, DialogType, IColumn, IDetailsList, ITextField, PrimaryButton, TextField } from '@fluentui/react'; import { ResourceKeys } from '../../../localization/resourceKeys'; interface ResizeDetailsListDialog { columnToEdit: React.MutableRefObject<IColumn>; detailsListRef: React.MutableRefObject<IDetailsList>; isDialogHidden: boolean; setIsDialogHidden: (isDialogHidden: boolean) => void; } export const ResizeDetailsListDialog: React.FC<ResizeDetailsListDialog> = ({columnToEdit, detailsListRef, isDialogHidden, setIsDialogHidden}) => { const { t } = useTranslation(); const textfieldRef = React.useRef<ITextField>(null); const input = React.useRef<number | null>(null); const resizeDialogContentProps = { closeButtonAriaLabel: 'Close', subText: t(ResourceKeys.resizableDetailsList.content.subText), title: t(ResourceKeys.resizableDetailsList.content.title), type: DialogType.normal }; const modalProps = { isBlocking: false, styles: { main: { maxWidth: 450 } }, titleAriaId: 'Dialog' }; const hideDialog = () => setIsDialogHidden(true); const confirmDialog = () => { const detailsList = detailsListRef.current; if (textfieldRef.current) { input.current = Number(textfieldRef.current.value); } if (columnToEdit.current && input.current && detailsList) { const width = input.current; detailsList.updateColumn(columnToEdit.current, { width }); } input.current = null; hideDialog(); }; return ( <Dialog hidden={isDialogHidden} onDismiss={hideDialog} dialogContentProps={resizeDialogContentProps} modalProps={modalProps} > <TextField componentRef={textfieldRef} ariaLabel={t(ResourceKeys.resizableDetailsList.content.subText)} /> <DialogFooter> <PrimaryButton onClick={confirmDialog} text={t(ResourceKeys.resizableDetailsList.buttons.resize)} /> <DefaultButton onClick={hideDialog} text={t(ResourceKeys.resizableDetailsList.buttons.cancel)} /> </DialogFooter> </Dialog> ); };