import React, { useEffect, useState } from 'react'; import cn from 'classnames'; import ColumnContainer from '../../components/containers/ColumnContainer/ColumnContainer'; import User from '../../components/UI/svgs/Icons/Contents/User'; import RowRightContainer from '../../components/containers/RowRightContainer/RowRightContainer'; import { EditDialogParams, FunctionTypeEditDialogParamsToVoid, FunctionTypeVoidToVoid, } from '../../../CommonTypes/BaseViewModel'; import UserAvatar from './UserAvatar/UserAvatar'; import { DialogType } from '../../../Domain/entity/DialogTypes'; import GroupChat from '../../components/UI/svgs/Icons/Contents/GroupChat'; import PublicChannel from '../../components/UI/svgs/Icons/Contents/PublicChannel'; import useQbInitializedDataContext from '../../providers/QuickBloxUIKitProvider/useQbInitializedDataContext'; import { Button, TextField } from '../../ui-components'; import { formatFileSize } from '../../../utils/formatFileSize'; import './EditDialog.scss'; export const TypeOpenDialog = { edit: 'edit', create: 'create', } as const; export type OpenDialogArcheType = keyof typeof TypeOpenDialog; type EditDialogProps = { nameDialog: string; typeDialog: DialogType; ulrIcon?: string; typeAddEditDialog: OpenDialogArcheType; clickUpdatedHandler?: FunctionTypeEditDialogParamsToVoid; clickCancelHandler?: FunctionTypeVoidToVoid; disableActions?: boolean; }; // eslint-disable-next-line react/function-component-definition,@typescript-eslint/no-unused-vars const EditDialog = ({ nameDialog = '', typeDialog, ulrIcon = '', typeAddEditDialog = TypeOpenDialog.create, clickUpdatedHandler, clickCancelHandler, disableActions = false, }: EditDialogProps) => { const currentContext = useQbInitializedDataContext(); const maxUploadFileSize = currentContext.InitParams.maxFileSize; const minLengthNameDialog = 3; const maxLengthNameDialog = 60; const errorMessageUploadMaxSize = `The file should not exceed this size: ${formatFileSize( maxUploadFileSize, )}`; const [dialogName, setDialogName] = useState(nameDialog); const [fileUploadAvatar, setFileUploadAvatar] = useState(null); const [urlAvatar, setUrlAvatar] = useState(ulrIcon || ''); const [disabledButton, setDisabledButton] = useState( nameDialog.length < minLengthNameDialog || nameDialog.length > maxLengthNameDialog, ); const [errorMessageUpload, setErrorMessageUpload] = useState(''); const handleUploadAvatar = (event: React.ChangeEvent) => { const allowedExtensions = ['jpg', 'jpeg', 'gif', 'png']; setErrorMessageUpload(''); const reader = new FileReader(); const file = event.currentTarget.files ? event.currentTarget.files[0] : null; if (file === null) return; if (!allowedExtensions.includes(file.type.split('/')[1])) { setErrorMessageUpload('Please use JPG, JPEG, PNG, or GIF.'); return; } const fileSize = file?.size || 0; console.log('MAX_FILE_SIZE', maxUploadFileSize, ' fileSize', fileSize); if (fileSize >= maxUploadFileSize) { setErrorMessageUpload(errorMessageUploadMaxSize); return; } reader.onloadend = () => { setFileUploadAvatar(file); setUrlAvatar(reader.result ? (reader.result as string) : ''); }; if (file !== null) reader.readAsDataURL(file); }; // eslint-disable-next-line consistent-return const renderAvatar = () => { if (urlAvatar.length < 1 || urlAvatar === 'null') { switch (typeDialog) { case DialogType.private: return ( ); case DialogType.group: return ( ); case DialogType.public: return ( ); default: return ( ); } } else { return ( { setUrlAvatar('null'); setErrorMessageUpload(''); }} /> ); } }; useEffect(() => { setDisabledButton( dialogName.length < minLengthNameDialog || dialogName.length > maxLengthNameDialog, ); }, [dialogName]); const handleUpdate = () => { if (clickUpdatedHandler) { const params: EditDialogParams = { dialogTitle: dialogName, // dialogAvatar: urlAvatar.length ? fileUploadAvatar : '', dialogAvatar: urlAvatar === 'null' ? 'null' : fileUploadAvatar, }; clickUpdatedHandler(params); } }; const handleCancel = () => { if (clickCancelHandler) { clickCancelHandler(); } }; return (
Dialog image
{renderAvatar()}
{errorMessageUpload.length > 0 ? (
{errorMessageUpload}
) : null}
Dialog name
setDialogName(value)} placeholder="Enter name" className="edit-dialog-container--wrapper__text-field" />
{typeAddEditDialog === TypeOpenDialog.create ? 'Next' : 'Save'} } CenterContainerSize={{ flexBasis: '78px', minWidth: '78px', maxWidth: '78px', minHeight: '32px', maxHeight: '32px', }} CenterItem={ } />
); }; export default EditDialog;