"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
var __rest = (this && this.__rest) || function (s, e) {
    var t = {};
    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
        t[p] = s[p];
    if (s != null && typeof Object.getOwnPropertySymbols === "function")
        for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
            if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
                t[p[i]] = s[p[i]];
        }
    return t;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
    return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Select = void 0;
var react_1 = __importStar(require("react"));
var react_native_1 = require("react-native");
var free_solid_svg_icons_1 = require("@fortawesome/free-solid-svg-icons");
var core_1 = require("@unform/core");
var _ = __importStar(require("lodash"));
var AppContext_1 = __importDefault(require("../../AppProvider/AppContext"));
var Input_style_1 = require("../../Input/native/Input.style");
var Pressable_1 = require("../../Pressable");
var TextNative_1 = require("../../TextNative");
var Select_style_1 = require("./Select.style");
var SelectPure_1 = require("./SelectPure");
function getValueSelect(options, value) {
    var returnValue = null;
    options.forEach(function (i) {
        if (i.value && _.isEqual(i.value, value)) {
            returnValue = i.value;
        }
        else if (_.isEqual(i.id, value)) {
            returnValue = i.value ? i.value : i.name;
        }
    });
    return returnValue;
}
function getValueSelectLabel(currentValue) {
    return (currentValue === null || currentValue === void 0 ? void 0 : currentValue.name) || currentValue;
}
exports.Select = function (_a) {
    var children = _a.children, name = _a.name, title = _a.title, items = _a.items, theme = _a.theme, _b = _a.as, as = _b === void 0 ? SelectPure_1.SelectPure : _b, rest = __rest(_a, ["children", "name", "title", "items", "theme", "as"]);
    var _c = react_1.useContext(AppContext_1.default).pureComponents, _d = (_c === void 0 ? {} : _c).Select, SelectComponent = _d === void 0 ? null : _d;
    var Component = SelectComponent !== null && SelectComponent !== void 0 ? SelectComponent : as;
    var _e = core_1.useField(name), fieldName = _e.fieldName, registerField = _e.registerField, defaultValue = _e.defaultValue, error = _e.error, clearError = _e.clearError;
    var _f = react_1.useState(false), openModal = _f[0], setOpenModal = _f[1];
    var _g = react_1.useState(getValueSelectLabel(defaultValue)), labelSelect = _g[0], setLabelSelect = _g[1];
    var _h = react_1.useState('Selecione uma opção...'), placeholder = _h[0], setPlaceholder = _h[1];
    var _j = react_1.useState(getValueSelect(items, defaultValue)), selectedValue = _j[0], setSelectedValue = _j[1];
    var inputRef = react_1.useRef(getValueSelect(items, defaultValue));
    react_1.useEffect(function () {
        registerField({
            name: fieldName,
            ref: inputRef,
            path: 'current',
        });
    }, [fieldName, registerField, children]);
    var select = function (itemValue) {
        if (itemValue.value) {
            setSelectedValue(itemValue.value);
            inputRef.current = itemValue.value;
        }
        else {
            setSelectedValue(itemValue.id);
            inputRef.current = itemValue.id;
        }
        setOpenModal(false);
        setLabelSelect(itemValue.name);
        clearError();
    };
    function onPress() {
        setOpenModal(true);
    }
    return (react_1.default.createElement(react_native_1.View, null,
        title && react_1.default.createElement(Input_style_1.TitleText, null, title),
        react_1.default.createElement(Select_style_1.SelectContainer, { testID: "select", onPress: onPress, error: error, ripple: true },
            react_1.default.createElement(react_native_1.View, { style: { flex: 1 } },
                !labelSelect && react_1.default.createElement(Select_style_1.SelectItemPlaceHolder, null, placeholder),
                !!labelSelect && react_1.default.createElement(Select_style_1.SelectItem, null, labelSelect)),
            react_1.default.createElement(react_native_1.View, null,
                react_1.default.createElement(Select_style_1.FontAwesomeIconItem, { icon: free_solid_svg_icons_1.faCaretDown }))),
        !!error && react_1.default.createElement(Input_style_1.TextError, { testID: "select-error" }, error),
        react_1.default.createElement(ModalOptions, { openModal: openModal, setOpenModal: setOpenModal, items: items, select: select })));
};
function ModalOptions(_a) {
    var openModal = _a.openModal, setOpenModal = _a.setOpenModal, items = _a.items, select = _a.select;
    return (react_1.default.createElement(react_native_1.Modal, { animationType: "fade", visible: openModal, transparent: true },
        react_1.default.createElement(react_native_1.View, { style: {
                flex: 1,
                justifyContent: 'center',
                alignItems: 'center',
                flexGrow: 1,
            } },
            react_1.default.createElement(Pressable_1.Pressable, { onPress: function () { return setOpenModal(false); }, style: {
                    flex: 1,
                    justifyContent: 'center',
                    alignItems: 'center',
                    backgroundColor: 'rgba(0,0,0,0.5)',
                    flexGrow: 1,
                    width: '100%',
                    height: '100%',
                    position: 'absolute',
                } },
                react_1.default.createElement(react_native_1.View, null)),
            react_1.default.createElement(react_native_1.View, { style: { flexDirection: 'row' } },
                react_1.default.createElement(react_native_1.ScrollView, { style: {
                        margin: 20,
                        width: '90%',
                        backgroundColor: 'white',
                        elevation: 5,
                    }, contentContainerStyle: { flexGrow: 1 } },
                    react_1.default.createElement(react_native_1.View, { style: {
                            flex: 1,
                            padding: 10,
                        } }, items &&
                        items.map(function (i) { return (react_1.default.createElement(Pressable_1.Pressable, { style: { paddingVertical: 10 }, key: i.id, onPress: function () { return select(i); }, testID: "option-" + i.id },
                            react_1.default.createElement(TextNative_1.TextNative, null, i.name))); })))))));
}
//# sourceMappingURL=Select.js.map