@atlaskit/editor-plugin-extension
Version:
editor-plugin-extension plugin for @atlaskit/editor-core
111 lines (109 loc) • 3.73 kB
JavaScript
import _extends from "@babel/runtime/helpers/extends";
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
var _excluded = ["onChange", "value"];
/**
* @jsxRuntime classic
* @jsx jsx
*/
import { Fragment, useCallback } from 'react';
// eslint-disable-next-line @atlaskit/ui-styling-standard/use-compiled, @typescript-eslint/consistent-type-imports
import { css, jsx } from '@emotion/react';
import { Checkbox as AKCheckbox } from '@atlaskit/checkbox';
import { Fieldset as AKFieldset, Field } from '@atlaskit/form';
import FieldMessages from '../FieldMessages';
import { ValidationError } from '../types';
function _validate(value, isRequired) {
if (isRequired && !(value !== null && value !== void 0 && value.length)) {
return ValidationError.Required;
}
}
var requiredIndicatorStyles = css({
color: "var(--ds-text-danger, #AE2E24)"
});
function CheckboxGroupInner(_ref) {
var label = _ref.label,
description = _ref.description,
onFieldChange = _ref.onFieldChange,
options = _ref.options,
error = _ref.error,
fieldProps = _ref.fieldProps;
var onChange = fieldProps.onChange,
value = fieldProps.value,
restFieldProps = _objectWithoutProperties(fieldProps, _excluded);
function _onChange(optionValue, isChecked) {
var active = new Set(value ? value : []);
if (isChecked) {
active.add(optionValue);
} else {
active.delete(optionValue);
}
onChange(_toConsumableArray(active));
onFieldChange();
}
return jsx(Fragment, null, jsx(AKFieldset, {
legend: label
}, options.map(function (_ref2, i) {
var optionLabel = _ref2.label,
optionValue = _ref2.value;
var isChecked = value && value.includes(optionValue);
var onOptionChange = function onOptionChange(event) {
_onChange(optionValue, event.target.checked);
};
return jsx(AKCheckbox
// Ignored via go/ees005
// eslint-disable-next-line react/no-array-index-key
, _extends({
key: i
// Ignored via go/ees005
// eslint-disable-next-line react/jsx-props-no-spreading
}, restFieldProps, {
isRequired: false,
label: optionLabel,
isChecked: isChecked,
onChange: onOptionChange
}));
})), jsx(FieldMessages, {
error: error,
description: description
}));
}
export default function CheckboxGroup(_ref3) {
var name = _ref3.name,
field = _ref3.field,
onFieldChange = _ref3.onFieldChange;
var labelBase = field.label,
description = field.description,
defaultValue = field.defaultValue,
_field$isRequired = field.isRequired,
isRequired = _field$isRequired === void 0 ? false : _field$isRequired,
options = field.items,
isDisabled = field.isDisabled;
var label = jsx(Fragment, null, labelBase, isRequired ? jsx("span", {
css: requiredIndicatorStyles,
"aria-hidden": "true"
}, " *") : null);
var _onFieldChange = useCallback(function () {
onFieldChange(name, true);
}, [name, onFieldChange]);
return jsx(Field, {
name: name,
isRequired: isRequired,
defaultValue: defaultValue
// eslint-disable-next-line @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017 (to be fixed)
,
validate: function validate(value) {
return _validate(value, isRequired);
},
isDisabled: isDisabled
}, function (props) {
return jsx(CheckboxGroupInner, _extends({
label: label,
description: description,
options: options,
onFieldChange: _onFieldChange
// Ignored via go/ees005
// eslint-disable-next-line react/jsx-props-no-spreading
}, props));
});
}