@brizy/ui
Version:
React elements in Brizy style
96 lines (95 loc) • 4.86 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (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 () {
var ownKeys = function(o) {
ownKeys = Object.getOwnPropertyNames || function (o) {
var ar = [];
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
return ar;
};
return ownKeys(o);
};
return function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
__setModuleDefault(result, mod);
return result;
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.SelectEditable = void 0;
const react_1 = __importStar(require("react"));
const Option_1 = require("./Option");
const types_1 = require("./types");
const Select_1 = require("../Select");
const Text_1 = require("../Input/Text");
const Popover_1 = require("../Popover");
const ClickOutside_1 = require("../ClickOutside");
const constants_1 = require("../constants");
const inputTheme = { background: "darkest", color: "white", borderColor: "darkest" };
const SelectEditable = ({ value, placeholder, error, choices, title, onChange, getPopoverContainer, getDropdownContainer, }) => {
const ref = (0, react_1.useRef)(null);
const [isEditMode, setIsEditMode] = (0, react_1.useState)(false);
const handleInputChange = (0, react_1.useCallback)((e) => {
onChange({ type: types_1.OnChangeCases.Edit, payload: e });
}, [onChange]);
const handleEdit = (0, react_1.useCallback)(() => {
setIsEditMode(true);
requestAnimationFrame(() => {
if (ref.current) {
ref.current.focus();
}
});
}, []);
const handleDuplicate = (0, react_1.useCallback)(() => {
onChange({ type: types_1.OnChangeCases.Duplicate });
}, [onChange]);
const handleDelete = (0, react_1.useCallback)(() => {
onChange({ type: types_1.OnChangeCases.Delete });
}, [onChange]);
const handleMFChange = (0, react_1.useCallback)((s) => {
onChange({ type: types_1.OnChangeCases.Symbol, payload: s });
}, [onChange]);
const handleChangeName = (0, react_1.useCallback)(() => {
setIsEditMode(false);
}, []);
const options = (0, react_1.useMemo)(() => [
{
title: "Edit Name",
onClick: handleEdit,
},
{
title: "Duplicate",
onClick: handleDuplicate,
},
{
title: "Delete",
onClick: handleDelete,
},
], [handleEdit, handleDuplicate, handleDelete]);
const content = options.map(({ title, onClick, disabled }, index) => (react_1.default.createElement(Option_1.Option, { key: index, title: title, disabled: disabled, onClick: value ? onClick : undefined })));
return (react_1.default.createElement(react_1.default.Fragment, null,
react_1.default.createElement("div", { className: `${constants_1.BRZ_PREFIX}-editable-select` },
isEditMode ? (react_1.default.createElement(ClickOutside_1.ClickOutside, { onClickOutside: handleChangeName },
react_1.default.createElement(Text_1.Text, { theme: inputTheme, value: title !== null && title !== void 0 ? title : "", onChange: handleInputChange }))) : (react_1.default.createElement(Select_1.Select, { theme: "dark", value: value, onChange: handleMFChange, placeholder: placeholder, getContainer: getDropdownContainer }, choices.map(({ title, value }, i) => (react_1.default.createElement(Select_1.SelectOption, { key: i, value: value }, title))))),
react_1.default.createElement(Popover_1.Popover, { color: "blue-darkest", content: content, trigger: "click", getPopupContainer: getPopoverContainer },
react_1.default.createElement("div", { className: `${constants_1.BRZ_PREFIX}-editable-select-dots` }))),
error && react_1.default.createElement("div", { className: `${constants_1.BRZ_PREFIX}-editable-select-error` }, error)));
};
exports.SelectEditable = SelectEditable;