import React, { useState, useCallback, useMemo, useEffect } from 'react'; import { useFormik } from 'formik'; import * as Yup from 'yup'; import { Button, FormGroup, InputGroup, Intent, MenuItem, Classes, } from '@blueprintjs/core'; import { optionsMapToArray, momentFormatter, optionsArrayToMap } from 'utils'; import { TimezonePicker } from '@blueprintjs/timezone'; import { Select } from '@blueprintjs/select'; import classNames from 'classnames'; import ErrorMessage from 'components/ErrorMessage'; import Icon from 'components/Icon'; import { compose } from 'utils'; import SettingsConnect from 'connectors/Settings.connect'; import AppToaster from 'components/AppToaster'; import { useIntl } from 'react-intl'; import useAsync from 'hooks/async'; function GeneralPreferences({ organizationSettings, requestSubmitOptions, requestFetchOptions, }) { const [selectedItems, setSelectedItems] = useState({}); const [timeZone, setTimeZone] = useState(''); const businessLocation = [ { id: 218, name: 'LIBYA', code: 'LY' }, { id: 380, name: 'UKRAINE', code: 'UA' }, { id: 212, name: 'Morocco', code: 'MA' }, ]; const languagesDisplay = [ { id: 0, name: 'EN', label: 'English' }, { id: 1, name: 'Arb', label: 'Arabic' }, ]; const currencies = [ { id: 0, name: 'US Dollar', code: 'USD' }, { id: 1, name: 'Euro', code: 'EUR' }, { id: 2, name: 'Libyan Dinar ', code: 'LYD' }, ]; const fiscalYear = [ { id: 0, name: 'January-July', label: 'January-July' }, { id: 1, name: 'August-December', label: 'August-December' }, ]; const dateFormat = [ { id: 1, name: '04/11/2020', format: 'MM-DD-YY' }, { id: 3, name: '2020/03/21', format: 'YY/MM/DD' }, { id: 4, name: 'Apr 11, 2020', format: 'MMMM yyyy' }, { id: 6, name: 'Saturday, Apr 11, 2020', format: 'EEEE, MMM d, yyyy' }, ]; const intl = useIntl(); const validationSchema = Yup.object().shape({ name: Yup.string().required(intl.formatMessage({ id: 'required' })), industry: Yup.string().required(intl.formatMessage({ id: 'required' })), location: Yup.string().required(intl.formatMessage({ id: 'required' })), base_currency: Yup.string().required( intl.formatMessage({ id: 'required' }) ), fiscal_year: Yup.string().required(intl.formatMessage({ id: 'required' })), language: Yup.string().required(intl.formatMessage({ id: 'required' })), // time_zone: Yup.object().required(intl.formatMessage({ id: 'required' })), date_format: Yup.date().required(intl.formatMessage({ id: 'required' })), }); console.log(organizationSettings.name); const formik = useFormik({ enableReinitialize: true, initialValues: { ...organizationSettings, }, validationSchema: validationSchema, onSubmit: (values, { setSubmitting }) => { const options = optionsMapToArray(values).map((option) => { return { key: option.key, ...option, group: 'organization' }; }); requestSubmitOptions({ options }) .then((response) => { AppToaster.show({ message: 'The_Options_has_been_Submit', }); setSubmitting(false); }) .catch((error) => { setSubmitting(false); }); }, }); const { errors, values, touched } = useMemo(() => formik, [formik]); const fetchHook = useAsync(async () => { await Promise.all([requestFetchOptions()]); }); const businessLocationItem = (item, { handleClick }) => ( ); const currencyItem = (item, { handleClick }) => ( ); const fiscalYearItem = (item, { handleClick }) => ( ); const languageItem = (item, { handleClick }) => ( ); const date_format = (item, { handleClick }) => ( ); const onItemsSelect = (filedName) => { return (filed) => { setSelectedItems({ ...selectedItems, [filedName]: filed, }); formik.setFieldValue(filedName, filed.name); }; }; const getSelectedItemLabel = (filedName, defaultLabel) => { return typeof selectedItems[filedName] !== 'undefined' ? selectedItems[filedName].name : defaultLabel; }; const handleTimezoneChange = (timezone) => setTimeZone(timezone); return (