import { Box, Cell, CustomModalLayout, FormField, Input, InputStatus, Layout, Modal, ModalProps, Text, TextButton, } from '@wix/design-system'; import React, { FormEvent, useCallback, useEffect, useState } from 'react'; import { observer } from 'mobx-react-lite'; import { FiltersMap } from '@wix/bex-core'; import { CollectionViewsState } from '../../../../state'; import { TextWidthLoader } from '../../../TextWidthLoader'; export interface CollectionSaveViewModalProps< T, F extends FiltersMap = FiltersMap, > extends Partial { state: CollectionViewsState; } function _CollectionSaveViewModal({ state, ...rest }: CollectionSaveViewModalProps) { const { views: { saveViewModal, collection }, } = state; const { translate: t } = collection; const [nameInputValue, setNameInputValue] = useState(''); const [statusMessage, setStatusMessage] = useState(); const [nameInputStatus, setNameInputStatus] = useState< InputStatus | undefined >(undefined); const [submitted, setSubmitted] = useState(false); useEffect(() => { if (nameInputValue !== '') { setNameInputStatus(undefined); setStatusMessage(undefined); } }, [nameInputValue]); useEffect(() => { saveViewModal.events.on('open', sendSaveNewViewSelectedBI); return () => { saveViewModal.events.off('open', sendSaveNewViewSelectedBI); }; }, []); const sendSaveNewViewSelectedBI = () => { state.sendSaveNewViewSelectedBI(); }; const onCloseModal = () => { setNameInputStatus(undefined); setNameInputValue(''); saveViewModal.close(); }; const primaryButtonOnClick = useCallback( async (event?: FormEvent) => { event?.preventDefault(); if (submitted) { return; } if (nameInputValue === '') { setNameInputStatus('error'); setStatusMessage(t('cairo.noViewName.validationTooltip')); return; } setSubmitted(true); await state.saveNewView(nameInputValue); onCloseModal(); }, [submitted, nameInputValue], ); return ( { setSubmitted(false); }} isOpen={saveViewModal.isOpen} >
{t('cairo.table.saveViewModal.body')} {state.learnMoreLink && ( <> {' '} {t('cairo.table.saveViewModal.learnMoreLink')} )} } primaryButtonText={ submitted ? undefined : t('cairo.saveViewModal.saveButton') } primaryButtonProps={{ children: submitted && ( ), }} primaryButtonOnClick={primaryButtonOnClick} secondaryButtonText={t('cairo.saveViewModal.cancelButton')} secondaryButtonOnClick={onCloseModal} onCloseButtonClick={onCloseModal} dataHook="save-view-modal" width="510px" > setNameInputValue(e.target.value)} status={nameInputStatus} statusMessage={statusMessage} maxLength={50} />
); } export const CollectionSaveViewModal = observer(_CollectionSaveViewModal);