@atlaskit/editor-plugin-extension
Version:
editor-plugin-extension plugin for @atlaskit/editor-core
112 lines (110 loc) • 3.03 kB
JavaScript
import _extends from "@babel/runtime/helpers/extends";
/**
* @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;
}
}
const requiredIndicatorStyles = css({
color: "var(--ds-text-danger, #AE2E24)"
});
function CheckboxGroupInner({
label,
description,
onFieldChange,
options,
error,
fieldProps
}) {
const {
onChange,
value,
...restFieldProps
} = fieldProps;
function _onChange(optionValue, isChecked) {
const active = new Set(value ? value : []);
if (isChecked) {
active.add(optionValue);
} else {
active.delete(optionValue);
}
onChange([...active]);
onFieldChange();
}
return jsx(Fragment, null, jsx(AKFieldset, {
legend: label
}, options.map(({
label: optionLabel,
value: optionValue
}, i) => {
const isChecked = value && value.includes(optionValue);
const 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({
name,
field,
onFieldChange
}) {
const {
label: labelBase,
description,
defaultValue,
isRequired = false,
items: options,
isDisabled
} = field;
const label = jsx(Fragment, null, labelBase, isRequired ? jsx("span", {
css: requiredIndicatorStyles,
"aria-hidden": "true"
}, " *") : null);
const _onFieldChange = useCallback(() => {
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: value => validate(value, isRequired),
isDisabled: isDisabled
}, 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));
});
}