"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
const jsx_runtime_1 = require("react/jsx-runtime");
const lab_1 = require("@mui/lab");
const material_1 = require("@mui/material");
const styles_1 = require("@mui/material/styles");
const system_1 = require("@mui/system");
const x_date_pickers_1 = require("@mui/x-date-pickers");
const AdapterDateFns_1 = require("@mui/x-date-pickers/AdapterDateFns");
const api_services_1 = require("@selfcommunity/api-services");
const react_core_1 = require("@selfcommunity/react-core");
const types_1 = require("@selfcommunity/types");
const utils_1 = require("@selfcommunity/utils");
const classnames_1 = tslib_1.__importDefault(require("classnames"));
const en_US_1 = tslib_1.__importDefault(require("date-fns/locale/en-US"));
const it_1 = tslib_1.__importDefault(require("date-fns/locale/it"));
const pubsub_js_1 = tslib_1.__importDefault(require("pubsub-js"));
const react_1 = require("react");
const react_intl_1 = require("react-intl");
const Errors_1 = require("../../constants/Errors");
const Event_1 = require("../../constants/Event");
const PubSub_1 = require("../../constants/PubSub");
const constants_1 = require("./constants");
const EventAddress_1 = tslib_1.__importDefault(require("./EventAddress"));
const UploadEventCover_1 = tslib_1.__importDefault(require("./UploadEventCover"));
const utils_2 = require("./utils");
const messages = (0, react_intl_1.defineMessages)({
    name: {
        id: 'ui.eventForm.name.placeholder',
        defaultMessage: 'ui.eventForm.name.placeholder'
    },
    description: {
        id: 'ui.eventForm.description.placeholder',
        defaultMessage: 'ui.eventForm.description.placeholder'
    },
    startDate: {
        id: 'ui.eventForm.date.placeholder',
        defaultMessage: 'ui.eventForm.date.placeholder'
    },
    startTime: {
        id: 'ui.eventForm.time.placeholder',
        defaultMessage: 'ui.eventForm.time.placeholder'
    },
    frequency: {
        id: 'ui.eventForm.frequency.label',
        defaultMessage: 'ui.eventForm.frequency.label'
    },
    frequencyPlaceholder: {
        id: 'ui.eventForm.frequency.none.placeholder',
        defaultMessage: 'ui.eventForm.frequency.none.placeholder'
    },
    endDate: {
        id: 'ui.eventForm.date.end.placeholder',
        defaultMessage: 'ui.eventForm.date.end.placeholder'
    },
    endTime: {
        id: 'ui.eventForm.time.end.placeholder',
        defaultMessage: 'ui.eventForm.time.end.placeholder'
    }
});
const classes = {
    root: `${constants_1.PREFIX}-root`,
    active: `${constants_1.PREFIX}-active`,
    title: `${constants_1.PREFIX}-title`,
    cover: `${constants_1.PREFIX}-cover`,
    picker: `${constants_1.PREFIX}-picker`,
    dateTime: `${constants_1.PREFIX}-date-time`,
    frequency: `${constants_1.PREFIX}-frequency`,
    form: `${constants_1.PREFIX}-form`,
    switch: `${constants_1.PREFIX}-switch`,
    switchLabel: `${constants_1.PREFIX}-switch-label`,
    name: `${constants_1.PREFIX}-name`,
    description: `${constants_1.PREFIX}-description`,
    content: `${constants_1.PREFIX}-content`,
    actions: `${constants_1.PREFIX}-actions`,
    privacySection: `${constants_1.PREFIX}-privacy-section`,
    privacySectionInfo: `${constants_1.PREFIX}-privacy-section-info`,
    error: `${constants_1.PREFIX}-error`
};
const Root = (0, styles_1.styled)(material_1.Box, {
    name: constants_1.PREFIX,
    slot: 'Root'
})(() => ({}));
/**
 *> API documentation for the Community-JS  Event Form component. Learn about the available props and the CSS API.
 *
 #### Import
 ```jsx
 import {EventForm} from '@selfcommunity/react-ui';
 ```

 #### Component Name
 The name `SCEventForm` can be used when providing style overrides in the theme.

 #### CSS

 |Rule Name|Global class|Description|
 |---|---|---|
 |root|.SCEventForm-root|Styles applied to the root element.|
 |active|.SCEventForm-active|Styles applied to the  active element.|
 |title|.SCEventForm-title|Styles applied to the title element.|
 |cover|.SCEventForm-cover|Styles applied to the cover field.|
 |form|.SCEventForm-form|Styles applied to the form element.|
 |switch|.SCEventForm-switch|Styles applied to the switch element.|
 |switchLabel|.SCEventForm-switch-label|Styles applied to the switchLabel element.|
 |name|.SCEventForm-name|Styles applied to the name field.|
 |description|.SCEventForm-description|Styles applied to the description field.|
 |content|.SCEventForm-content|Styles applied to the  element.|
 |privacySection|.SCEventForm-privacy-section|Styles applied to the privacy section.|
 |privacySectionInfo|.SCEventForm-privacy-section-info|Styles applied to the privacy info section.|
 |error|.SCEventForm-error|Styles applied to the error elements.|

 * @param inProps
 */
function EventForm(inProps) {
    var _a, _b, _c;
    //PROPS
    const props = (0, system_1.useThemeProps)({
        props: inProps,
        name: constants_1.PREFIX
    });
    const { className, onSuccess, onError, event = null } = props, rest = tslib_1.__rest(props, ["className", "onSuccess", "onError", "event"]);
    // CONTEXT
    const scContext = (0, react_core_1.useSCContext)();
    // INTL
    const intl = (0, react_intl_1.useIntl)();
    const startDateTime = (0, react_1.useMemo)(() => (0, utils_2.getNewDate)(event === null || event === void 0 ? void 0 : event.start_date), [event]);
    const endDateTime = (0, react_1.useMemo)(() => (0, utils_2.getNewDate)(event === null || event === void 0 ? void 0 : event.end_date), [event]);
    const initialFieldState = {
        imageOriginal: (event === null || event === void 0 ? void 0 : event.image_bigger) || '',
        imageOriginalFile: '',
        startDate: event ? startDateTime : (0, utils_2.getNewDate)(),
        startTime: event ? startDateTime : (0, utils_2.getLaterHoursDate)(1),
        endDate: (event === null || event === void 0 ? void 0 : event.end_date) ? endDateTime : (0, utils_2.getNewDate)(),
        endTime: (event === null || event === void 0 ? void 0 : event.end_date) ? endDateTime : (0, utils_2.getLaterHoursDate)(3),
        location: (event === null || event === void 0 ? void 0 : event.location) || types_1.SCEventLocationType.PERSON,
        geolocation: (event === null || event === void 0 ? void 0 : event.geolocation) || '',
        lat: (event === null || event === void 0 ? void 0 : event.geolocation_lat) || null,
        lng: (event === null || event === void 0 ? void 0 : event.geolocation_lng) || null,
        link: (event === null || event === void 0 ? void 0 : event.link) || '',
        recurring: (event === null || event === void 0 ? void 0 : event.recurring) || types_1.SCEventRecurrenceType.NEVER,
        name: (event === null || event === void 0 ? void 0 : event.name) || '',
        description: event ? event.description : '',
        isPublic: (event === null || event === void 0 ? void 0 : event.privacy) === types_1.SCEventPrivacyType.PUBLIC || true,
        isSubmitting: false
    };
    // STATE
    const [field, setField] = (0, react_1.useState)(initialFieldState);
    const [error, setError] = (0, react_1.useState)({});
    // PREFERENCES
    const scPreferences = (0, react_core_1.useSCPreferences)();
    const privateEnabled = (0, react_1.useMemo)(() => scPreferences.preferences[react_core_1.SCPreferences.CONFIGURATIONS_EVENTS_PRIVATE_ENABLED].value, [scPreferences.preferences]);
    const visibilityEnabled = (0, react_1.useMemo)(() => scPreferences.preferences[react_core_1.SCPreferences.CONFIGURATIONS_EVENTS_VISIBILITY_ENABLED].value, [scPreferences.preferences]);
    const disablePastStartTime = (0, react_1.useMemo)(() => field.startDate.getDate() === (0, utils_2.getNewDate)().getDate(), [field]);
    const disablePastEndTime = (0, react_1.useMemo)(() => field.endDate.getDate() === (0, utils_2.getNewDate)().getDate(), [field]);
    const _backgroundCover = Object.assign({}, (field.imageOriginal
        ? { background: `url('${field.imageOriginal}') center / cover` }
        : { background: `url('${scPreferences.preferences[react_core_1.SCPreferences.IMAGES_USER_DEFAULT_COVER].value}') center / cover` }));
    const handleChangeCover = (0, react_1.useCallback)((cover) => {
        setField((prev) => (Object.assign(Object.assign({}, prev), { ['imageOriginalFile']: cover })));
        const reader = new FileReader();
        reader.onloadend = () => {
            setField((prev) => (Object.assign(Object.assign({}, prev), { ['imageOriginal']: reader.result })));
        };
        reader.readAsDataURL(cover);
        if (error.imageOriginalError) {
            delete error.imageOriginalError;
            setError(error);
        }
    }, [error]);
    /**
     * Notify when a group info changed
     * @param data
     */
    const notifyChanges = (0, react_1.useCallback)((data) => {
        if (event) {
            // Edit group
            pubsub_js_1.default.publish(`${PubSub_1.SCTopicType.EVENT}.${PubSub_1.SCGroupEventType.EDIT}`, data);
        }
        else {
            // Create group
            pubsub_js_1.default.publish(`${PubSub_1.SCTopicType.EVENT}.${PubSub_1.SCGroupEventType.CREATE}`, data);
        }
    }, [event]);
    const handleGeoData = (0, react_1.useCallback)((data) => {
        setField((prev) => (Object.assign(Object.assign({}, prev), data)));
    }, []);
    const handleSubmit = (0, react_1.useCallback)(() => {
        setField((prev) => (Object.assign(Object.assign({}, prev), { ['isSubmitting']: true })));
        const formData = new FormData();
        if (field.imageOriginalFile) {
            formData.append('image_original', field.imageOriginalFile);
        }
        formData.append('name', field.name);
        formData.append('start_date', (0, utils_2.combineDateAndTime)(field.startDate, field.startTime));
        formData.append('recurring', field.recurring);
        formData.append('end_date', (0, utils_2.combineDateAndTime)(field.endDate, field.endTime));
        formData.append('location', field.location);
        if (field.location === types_1.SCEventLocationType.ONLINE) {
            formData.append('link', field.link);
        }
        else if (field.location === types_1.SCEventLocationType.PERSON) {
            formData.append('geolocation', field.geolocation);
            formData.append('geolocation_lat', field.lat.toString());
            formData.append('geolocation_lng', field.lng.toString());
        }
        if (privateEnabled) {
            formData.append('privacy', field.isPublic ? types_1.SCEventPrivacyType.PUBLIC : types_1.SCEventPrivacyType.PRIVATE);
        }
        if (visibilityEnabled) {
            formData.append('visible', 'true');
        }
        formData.append('description', field.description);
        let eventService;
        if (event) {
            eventService = api_services_1.EventService.updateEvent(event.id, formData, { headers: { 'Content-Type': 'multipart/form-data' } });
        }
        else {
            eventService = api_services_1.EventService.createEvent(formData, { headers: { 'Content-Type': 'multipart/form-data' } });
        }
        eventService
            .then((data) => {
            notifyChanges(data);
            setField((prev) => (Object.assign(Object.assign({}, prev), { ['isSubmitting']: false })));
            onSuccess === null || onSuccess === void 0 ? void 0 : onSuccess(data);
        })
            .catch((e) => {
            const _error = (0, api_services_1.formatHttpErrorCode)(e);
            if (Object.values(_error)[0]['error'] === 'unique') {
                setError(Object.assign(Object.assign({}, error), { ['nameError']: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.eventForm.name.error.unique", defaultMessage: "ui.eventForm.name.error.unique" }) }));
            }
            else {
                setError(Object.assign(Object.assign({}, error), _error));
            }
            setField((prev) => (Object.assign(Object.assign({}, prev), { ['isSubmitting']: false })));
            utils_1.Logger.error(Errors_1.SCOPE_SC_UI, e);
            onError === null || onError === void 0 ? void 0 : onError(e);
        });
    }, [field, privateEnabled, visibilityEnabled, onSuccess, onError, notifyChanges]);
    const handleChange = (0, react_1.useCallback)((event) => {
        const { name, value } = event.target;
        setField((prev) => (Object.assign(Object.assign({}, prev), { [name]: value })));
        if (error[`${name}Error`]) {
            delete error[`${name}Error`];
            setError(error);
        }
    }, [setField, error]);
    const handleChangeDateTime = (0, react_1.useCallback)((value, name) => {
        setField((prev) => (Object.assign(Object.assign({}, prev), { [name]: value })));
        if (error[`${name}Error`]) {
            delete error[`${name}Error`];
            setError(error);
        }
        else if (error['endDateError']) {
            delete error['endDateError'];
            setError(error);
        }
    }, [setField, error]);
    const shouldDisableDate = (0, react_1.useCallback)((date) => {
        let disabled = false;
        switch (field.recurring) {
            case types_1.SCEventRecurrenceType.DAILY:
                disabled = date.getTime() > (0, utils_2.getLaterDaysDate)(constants_1.DAILY_LATER_DAYS, field.startDate).getTime();
                break;
            case types_1.SCEventRecurrenceType.WEEKLY:
                disabled = date.getTime() > (0, utils_2.getLaterDaysDate)(constants_1.WEEKLY_LATER_DAYS, field.startDate).getTime();
                break;
            case types_1.SCEventRecurrenceType.MONTHLY:
                disabled = date.getTime() > (0, utils_2.getLaterDaysDate)(constants_1.MONTHLY_LATER_DAYS, field.startDate).getTime();
                break;
            case types_1.SCEventRecurrenceType.NEVER:
            default:
                disabled = date.getTime() > (0, utils_2.getLaterDaysDate)(constants_1.NEVER_LATER_DAYS, field.startDate).getTime();
        }
        return disabled;
    }, [field]);
    const shouldDisableTime = (0, react_1.useCallback)((date) => field.startTime.getTime() > date.getTime(), [field]);
    /**
     * Renders root object
     */
    return ((0, jsx_runtime_1.jsxs)(Root, Object.assign({ className: (0, classnames_1.default)(classes.root, className) }, rest, { children: [(0, jsx_runtime_1.jsx)(material_1.Paper, Object.assign({ style: _backgroundCover, classes: { root: classes.cover } }, { children: (0, jsx_runtime_1.jsx)(UploadEventCover_1.default, { isCreationMode: true, onChange: handleChangeCover }) })), (0, jsx_runtime_1.jsxs)(material_1.FormGroup, Object.assign({ className: classes.form }, { children: [(0, jsx_runtime_1.jsx)(material_1.TextField, { required: true, className: classes.name, placeholder: `${intl.formatMessage(messages.name)}`, margin: "normal", value: field.name, name: "name", onChange: handleChange, InputProps: {
                            endAdornment: (0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "body2" }, { children: Event_1.EVENT_TITLE_MAX_LENGTH - field.name.length }))
                        }, error: Boolean(field.name.length > Event_1.EVENT_TITLE_MAX_LENGTH) || Boolean(error['nameError']), helperText: field.name.length > Event_1.EVENT_TITLE_MAX_LENGTH ? ((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.eventForm.name.error.maxLength", defaultMessage: "ui.eventForm.name.error.maxLength" })) : error['nameError'] ? (error['nameError']) : null }), (0, jsx_runtime_1.jsx)(material_1.Box, Object.assign({ className: classes.dateTime }, { children: (0, jsx_runtime_1.jsxs)(x_date_pickers_1.LocalizationProvider, Object.assign({ dateAdapter: AdapterDateFns_1.AdapterDateFns, adapterLocale: scContext.settings.locale.default === 'it' ? it_1.default : en_US_1.default }, { children: [(0, jsx_runtime_1.jsx)(x_date_pickers_1.MobileDatePicker, { className: classes.picker, disablePast: true, label: field.startDate && (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.eventForm.date.placeholder", defaultMessage: "ui.eventForm.date.placeholder" }), value: field.startDate, slots: {
                                        textField: (params) => ((0, jsx_runtime_1.jsx)(material_1.TextField, Object.assign({}, params, { InputProps: Object.assign(Object.assign({}, params.InputProps), { placeholder: `${intl.formatMessage(messages.startDate)}`, startAdornment: ((0, jsx_runtime_1.jsx)(material_1.InputAdornment, Object.assign({ position: "start" }, { children: (0, jsx_runtime_1.jsx)(material_1.IconButton, { children: (0, jsx_runtime_1.jsx)(material_1.Icon, { children: "CalendarIcon" }) }) }))) }) })))
                                    }, slotProps: {
                                        toolbar: {
                                            // eslint-disable-next-line @typescript-eslint/ban-ts-ignore,@typescript-eslint/ban-ts-comment
                                            // @ts-ignore
                                            toolbarTitle: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.eventForm.date.title", defaultMessage: "ui.eventForm.date.title" })
                                        }
                                    }, onChange: (value) => handleChangeDateTime(value, 'startDate') }), (0, jsx_runtime_1.jsx)(x_date_pickers_1.MobileTimePicker, { className: classes.picker, disablePast: disablePastStartTime, label: field.startTime && (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.eventForm.time.placeholder", defaultMessage: "ui.eventForm.time.placeholder" }), value: field.startTime, slots: {
                                        textField: (params) => ((0, jsx_runtime_1.jsx)(material_1.TextField, Object.assign({}, params, { InputProps: Object.assign(Object.assign({}, params.InputProps), { placeholder: `${intl.formatMessage(messages.startTime)}`, startAdornment: ((0, jsx_runtime_1.jsx)(material_1.InputAdornment, Object.assign({ position: "start" }, { children: (0, jsx_runtime_1.jsx)(material_1.IconButton, { children: (0, jsx_runtime_1.jsx)(material_1.Icon, { children: "access_time" }) }) }))) }) })))
                                    }, slotProps: {
                                        toolbar: {
                                            // eslint-disable-next-line @typescript-eslint/ban-ts-ignore,@typescript-eslint/ban-ts-comment
                                            // @ts-ignore
                                            toolbarTitle: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.eventForm.time.title", defaultMessage: "ui.eventForm.time.title" })
                                        }
                                    }, onChange: (value) => handleChangeDateTime(value, 'startTime') })] })) })), (0, jsx_runtime_1.jsxs)(material_1.FormControl, Object.assign({ className: classes.frequency }, { children: [field.recurring !== types_1.SCEventRecurrenceType.NEVER && (0, jsx_runtime_1.jsx)(material_1.InputLabel, Object.assign({ id: "recurring" }, { children: `${intl.formatMessage(messages.frequency)}` })), (0, jsx_runtime_1.jsx)(material_1.Select, Object.assign({ name: "recurring", label: field.recurring !== types_1.SCEventRecurrenceType.NEVER && `${intl.formatMessage(messages.frequency)}`, labelId: "recurring", value: field.recurring, onChange: handleChange, displayEmpty: true, renderValue: (selected) => {
                                    if (!selected) {
                                        return (0, jsx_runtime_1.jsx)("em", { children: `${intl.formatMessage(messages.frequencyPlaceholder)}` });
                                    }
                                    return ((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: `ui.eventForm.frequency.${selected}.placeholder`, defaultMessage: `ui.eventForm.frequency.${selected}.placeholder` }));
                                }, startAdornment: (0, jsx_runtime_1.jsx)(material_1.InputAdornment, Object.assign({ position: "start" }, { children: (0, jsx_runtime_1.jsx)(material_1.IconButton, { children: (0, jsx_runtime_1.jsx)(material_1.Icon, { children: "frequency" }) }) })) }, { children: Object.values(types_1.SCEventRecurrenceType).map((f) => ((0, jsx_runtime_1.jsx)(material_1.MenuItem, Object.assign({ value: f }, { children: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: `ui.eventForm.frequency.${f}.placeholder`, defaultMessage: `ui.eventForm.frequency.${f}.placeholder` }) }), f))) }))] })), (0, jsx_runtime_1.jsx)(material_1.Box, Object.assign({ className: classes.dateTime }, { children: (0, jsx_runtime_1.jsxs)(x_date_pickers_1.LocalizationProvider, Object.assign({ dateAdapter: AdapterDateFns_1.AdapterDateFns, adapterLocale: scContext.settings.locale.default === 'it' ? it_1.default : en_US_1.default }, { children: [(0, jsx_runtime_1.jsx)(x_date_pickers_1.MobileDatePicker, { className: classes.picker, minDate: field.startDate, label: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.eventForm.date.end.placeholder", defaultMessage: "ui.eventForm.date.end.placeholder" }), value: field.endDate, slots: {
                                        textField: (params) => ((0, jsx_runtime_1.jsx)(material_1.TextField, Object.assign({}, params, { InputProps: Object.assign(Object.assign({}, params.InputProps), { placeholder: `${intl.formatMessage(messages.endDate)}`, startAdornment: ((0, jsx_runtime_1.jsx)(material_1.InputAdornment, Object.assign({ position: "start" }, { children: (0, jsx_runtime_1.jsx)(material_1.IconButton, { children: (0, jsx_runtime_1.jsx)(material_1.Icon, { children: "calendar_off" }) }) }))) }) })))
                                    }, slotProps: {
                                        toolbar: {
                                            // eslint-disable-next-line @typescript-eslint/ban-ts-ignore,@typescript-eslint/ban-ts-comment
                                            // @ts-ignore
                                            toolbarTitle: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.eventForm.date.title", defaultMessage: "ui.eventForm.date.title" })
                                        }
                                    }, onChange: (value) => handleChangeDateTime(value, 'endDate'), shouldDisableDate: shouldDisableDate }), (0, jsx_runtime_1.jsx)(x_date_pickers_1.MobileTimePicker, { className: classes.picker, disablePast: disablePastEndTime, label: field.endTime && (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.eventForm.time.end.placeholder", defaultMessage: "ui.eventForm.time.end.placeholder" }), value: field.endTime, slots: {
                                        textField: (params) => {
                                            var _a;
                                            return ((0, jsx_runtime_1.jsx)(material_1.TextField, Object.assign({}, params, { InputProps: Object.assign(Object.assign({}, params.InputProps), { placeholder: `${intl.formatMessage(messages.endTime)}`, startAdornment: ((0, jsx_runtime_1.jsx)(material_1.InputAdornment, Object.assign({ position: "start" }, { children: (0, jsx_runtime_1.jsx)(material_1.IconButton, { children: (0, jsx_runtime_1.jsx)(material_1.Icon, { children: "access_time" }) }) }))) }), error: Boolean(error['endDateError']), helperText: ((_a = error['endDateError']) === null || _a === void 0 ? void 0 : _a.error) ? ((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.eventForm.time.end.error.invalid", defaultMessage: "ui.eventForm.time.end.error.invalid" })) : null })));
                                        }
                                    }, slotProps: {
                                        toolbar: {
                                            // eslint-disable-next-line @typescript-eslint/ban-ts-ignore,@typescript-eslint/ban-ts-comment
                                            // @ts-ignore
                                            toolbarTitle: (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.eventForm.time.title", defaultMessage: "ui.eventForm.time.title" })
                                        }
                                    }, onChange: (value) => handleChangeDateTime(value, 'endTime'), shouldDisableTime: shouldDisableTime })] })) })), (0, jsx_runtime_1.jsx)(EventAddress_1.default, { forwardGeolocationData: handleGeoData, event: event !== null && event !== void 0 ? event : null }), privateEnabled && ((0, jsx_runtime_1.jsxs)(material_1.Box, Object.assign({ className: classes.privacySection }, { children: [(0, jsx_runtime_1.jsxs)(material_1.Stack, Object.assign({ direction: "row", spacing: 1, alignItems: "center", justifyContent: "center" }, { children: [(0, jsx_runtime_1.jsxs)(material_1.Typography, Object.assign({ className: (0, classnames_1.default)(classes.switchLabel, { [classes.active]: !field.isPublic }) }, { children: [(0, jsx_runtime_1.jsx)(material_1.Icon, { children: "private" }), (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.eventForm.privacy.private", defaultMessage: "ui.eventForm.privacy.private" })] })), (0, jsx_runtime_1.jsx)(material_1.Switch, { className: classes.switch, checked: field.isPublic, onChange: () => setField((prev) => (Object.assign(Object.assign({}, prev), { ['isPublic']: !field.isPublic }))), disabled: event && !field.isPublic }), (0, jsx_runtime_1.jsxs)(material_1.Typography, Object.assign({ className: (0, classnames_1.default)(classes.switchLabel, { [classes.active]: field.isPublic }) }, { children: [(0, jsx_runtime_1.jsx)(material_1.Icon, { children: "public" }), (0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.eventForm.privacy.public", defaultMessage: "ui.eventForm.privacy.public" })] }))] })), (0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "body2", textAlign: "center", className: classes.privacySectionInfo }, { children: field.isPublic ? ((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.eventForm.privacy.public.info", defaultMessage: "ui.eventForm.privacy.public.info", values: {
                                        // eslint-disable-next-line @typescript-eslint/ban-ts-ignore,@typescript-eslint/ban-ts-comment
                                        // @ts-ignores
                                        b: (chunks) => (0, jsx_runtime_1.jsx)("strong", { children: chunks })
                                    } })) : ((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.eventForm.privacy.private.info", defaultMessage: "ui.eventForm.private.public.info", values: {
                                        // eslint-disable-next-line @typescript-eslint/ban-ts-ignore,@typescript-eslint/ban-ts-comment
                                        // @ts-ignore
                                        b: (chunks) => (0, jsx_runtime_1.jsx)("strong", { children: chunks })
                                    } })) }))] }))), (0, jsx_runtime_1.jsx)(material_1.TextField, { multiline: true, className: classes.description, placeholder: `${intl.formatMessage(messages.description)}`, margin: "normal", value: field.description, name: "description", onChange: handleChange, InputProps: {
                            endAdornment: ((0, jsx_runtime_1.jsx)(material_1.Typography, Object.assign({ variant: "body2" }, { children: ((_a = field.description) === null || _a === void 0 ? void 0 : _a.length) ? Event_1.EVENT_DESCRIPTION_MAX_LENGTH - field.description.length : Event_1.EVENT_DESCRIPTION_MAX_LENGTH })))
                        }, error: Boolean(((_b = field.description) === null || _b === void 0 ? void 0 : _b.length) > Event_1.EVENT_DESCRIPTION_MAX_LENGTH), helperText: ((_c = field.description) === null || _c === void 0 ? void 0 : _c.length) > Event_1.EVENT_DESCRIPTION_MAX_LENGTH ? ((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.eventForm.description.error.maxLength", defaultMessage: "ui.eventForm.description.error.maxLength" })) : null }), (0, jsx_runtime_1.jsx)(material_1.Box, Object.assign({ className: classes.actions }, { children: (0, jsx_runtime_1.jsx)(lab_1.LoadingButton, Object.assign({ loading: field.isSubmitting, disabled: !field.name ||
                                !field.startDate ||
                                !field.startTime ||
                                !field.endDate ||
                                !field.endTime ||
                                (field.location === types_1.SCEventLocationType.ONLINE && !field.link) ||
                                (field.location === types_1.SCEventLocationType.PERSON && !field.geolocation) ||
                                (field.recurring !== types_1.SCEventRecurrenceType.NEVER && !field.endDate && !field.endTime) ||
                                Object.keys(error).length !== 0 ||
                                field.name.length > Event_1.EVENT_TITLE_MAX_LENGTH ||
                                field.description.length > Event_1.EVENT_DESCRIPTION_MAX_LENGTH, variant: "contained", onClick: handleSubmit, color: "secondary" }, { children: event ? ((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.eventForm.button.edit", defaultMessage: "ui.eventForm.button.edit" })) : ((0, jsx_runtime_1.jsx)(react_intl_1.FormattedMessage, { id: "ui.eventForm.button.create", defaultMessage: "ui.eventForm.button.create" })) })) }))] }))] })));
}
exports.default = EventForm;
