"use strict";
/*
 * Copyright 2023 Palantir Technologies, Inc. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.useDateFormatter = void 0;
var tslib_1 = require("tslib");
var React = tslib_1.__importStar(require("react"));
var datetime_1 = require("@blueprintjs/datetime");
var dateFnsFormatUtils_1 = require("../../common/dateFnsFormatUtils");
var dateFnsLocaleProps_1 = require("../../common/dateFnsLocaleProps");
/**
 * Create a date string parser function based on a given locale.
 *
 * Prefer using user-provided `props.formatDate` and `props.dateFnsFormat` if available, otherwise fall back to
 * default formats inferred from time picker props.
 */
function useDateFormatter(props, locale) {
    var _a = props, dateFnsFormat = _a.dateFnsFormat, localeFromProps = _a.locale, formatDate = _a.formatDate, invalidDateMessage = _a.invalidDateMessage, maxDate = _a.maxDate, minDate = _a.minDate, outOfRangeMessage = _a.outOfRangeMessage, timePickerProps = _a.timePickerProps, timePrecision = _a.timePrecision;
    return React.useCallback(function (date) {
        var _a;
        if (date === undefined) {
            return "";
        }
        if (!datetime_1.DateUtils.isDateValid(date)) {
            return invalidDateMessage;
        }
        else if (datetime_1.DateUtils.isDayInRange(date, [minDate, maxDate])) {
            if (formatDate !== undefined) {
                // user-provided date formatter
                return formatDate(date, (_a = locale === null || locale === void 0 ? void 0 : locale.code) !== null && _a !== void 0 ? _a : (0, dateFnsLocaleProps_1.getLocaleCodeFromProps)(localeFromProps));
            }
            else {
                // use user-provided date-fns format or one of the default formats inferred from time picker props
                var format = dateFnsFormat !== null && dateFnsFormat !== void 0 ? dateFnsFormat : (0, dateFnsFormatUtils_1.getDefaultDateFnsFormat)({ timePickerProps: timePickerProps, timePrecision: timePrecision });
                return (0, dateFnsFormatUtils_1.getDateFnsFormatter)(format, locale)(date);
            }
        }
        else {
            return outOfRangeMessage;
        }
    }, [
        dateFnsFormat,
        formatDate,
        invalidDateMessage,
        locale,
        localeFromProps,
        maxDate,
        minDate,
        outOfRangeMessage,
        timePickerProps,
        timePrecision,
    ]);
}
exports.useDateFormatter = useDateFormatter;
//# sourceMappingURL=useDateFormatter.js.map