"use strict";
var __assign = (this && this.__assign) || Object.assign || function(t) {
    for (var s, i = 1, n = arguments.length; i < n; i++) {
        s = arguments[i];
        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
            t[p] = s[p];
    }
    return t;
};
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)
            t[p[i]] = s[p[i]];
    return t;
};
Object.defineProperty(exports, "__esModule", { value: true });
var assign = require("lodash/assign");
var map = require("lodash/map");
var React = require("react");
var utils = require("../../utils");
var Select_1 = require("../Select");
exports.operators = {
    is: {
        getLabel: function (_s) { return 'is'; },
    },
    is_not: {
        getLabel: function (_s) { return 'is not'; },
    },
};
exports.decodeFilter = function (filter) {
    var operator = filter.title;
    if (!filter.properties) {
        return null;
    }
    var keys = Object.keys(filter.properties);
    if (!keys.length) {
        return null;
    }
    var value;
    var field = keys[0];
    if (operator === 'is') {
        value = filter.properties[field].const;
    }
    else if (operator === 'is_not') {
        value = filter.properties[field].not.const;
    }
    else {
        return null;
    }
    return {
        field: field,
        operator: operator,
        value: value,
    };
};
exports.createFilter = function (field, operator, value, schema) {
    var title = schema.title;
    var base = {
        $id: utils.randomString(),
        title: operator,
        description: (title || field) + " " + exports.operators[operator].getLabel(schema) + " " + value,
        type: 'object',
    };
    if (operator === 'is') {
        return assign(base, {
            properties: (_a = {},
                _a[field] = {
                    const: value,
                },
                _a),
            required: [field],
        });
    }
    if (operator === 'is_not') {
        return assign(base, {
            properties: (_b = {},
                _b[field] = {
                    not: {
                        const: value,
                    },
                },
                _b),
        });
    }
    return base;
    var _a, _b;
};
exports.Edit = function (_a) {
    var schema = _a.schema, value = _a.value, onUpdate = _a.onUpdate, props = __rest(_a, ["schema", "value", "onUpdate"]);
    return (React.createElement(Select_1.default, __assign({}, props, { value: value, onChange: function (e) {
            return onUpdate(e.currentTarget.value);
        } }), map(schema.enum, function (item) { return (React.createElement("option", { key: item }, item)); })));
};
