UNPKG

@atlaskit/editor-plugin-extension

Version:

editor-plugin-extension plugin for @atlaskit/editor-core

160 lines (159 loc) 4.68 kB
import _extends from "@babel/runtime/helpers/extends"; /** * @jsxRuntime classic * @jsx jsx */ import React, { Fragment } 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 { Field } from '@atlaskit/form'; import { Text } from '@atlaskit/primitives/compiled'; import AKToggle from '@atlaskit/toggle'; import FieldMessages from '../FieldMessages'; import { ValidationError } from '../types'; const toggleFieldWrapperStyles = css({ display: 'flex' }); const toggleLabelStyles = css({ display: 'flex', padding: `${"var(--ds-space-050, 4px)"} ${"var(--ds-space-050, 4px)"} ${"var(--ds-space-050, 4px)"} ${"var(--ds-space-0, 0px)"}`, flexGrow: 1 }); function validate(value, isRequired) { if (isRequired && !value) { return ValidationError.Required; } } function parseBoolean(value) { if (typeof value === 'boolean') { return value; } return value === 'true'; } function handleOnChange(onChange, onFieldChange, event) { var _event$target; onChange((event === null || event === void 0 ? void 0 : (_event$target = event.target) === null || _event$target === void 0 ? void 0 : _event$target.checked) || false); // Note: prior to bumping typescript to version 2.4.2 onFieldChange // was being called with a global variable (which had a value of '') // While this was not intended, the code still worked as expected. // In typescript 2.4.2 accessing the global variable name has been // deprecated, so this has been replaced with the value it was // previously passing. onFieldChange('', true); } function Checkbox({ name, field, onFieldChange }) { const { label, description, isRequired = false, defaultValue = false, isDisabled } = field; return jsx(Field, { name: name, isRequired: isRequired // eslint-disable-next-line @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017 (to be fixed) , validate: value => validate(value, isRequired), defaultValue: defaultValue, isDisabled: isDisabled }, ({ fieldProps, error }) => { const { value: isChecked, ...restFieldProps } = fieldProps; return jsx(Fragment, null, jsx(AKCheckbox // Ignored via go/ees005 // eslint-disable-next-line react/jsx-props-no-spreading , _extends({}, restFieldProps, { label: label // eslint-disable-next-line @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017 (to be fixed) , onChange: event => handleOnChange(fieldProps.onChange, onFieldChange, event), isChecked: parseBoolean(isChecked) })), jsx(FieldMessages, { error: error, description: description })); }); } function Toggle({ name, field, onFieldChange }) { const { label, description, isRequired = false, defaultValue = false, isDisabled } = field; return jsx(Field, { name: name, isRequired: isRequired // eslint-disable-next-line @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017 (to be fixed) , validate: value => validate(value, isRequired), defaultValue: defaultValue, testId: `config-panel-toggle-${name}`, isDisabled: isDisabled }, ({ fieldProps, error }) => { const { id, value: isChecked, ...restFieldProps } = fieldProps; return jsx(Fragment, null, jsx("div", { css: toggleFieldWrapperStyles }, jsx("label", { css: toggleLabelStyles, htmlFor: id }, label, isRequired ? // eslint-disable-next-line @atlassian/i18n/no-literal-string-in-jsx jsx(Text, { color: "color.text.danger", "aria-hidden": "true" }, "*") : null), jsx(AKToggle // Ignored via go/ees005 // eslint-disable-next-line react/jsx-props-no-spreading , _extends({}, restFieldProps, { // eslint-disable-next-line @atlassian/perf-linting/no-unstable-inline-props -- Ignored via go/ees017 (to be fixed) onChange: event => handleOnChange(fieldProps.onChange, onFieldChange, event), isChecked: parseBoolean(isChecked), id: id }))), jsx(FieldMessages, { error: error, description: description })); }); } export default function Boolean({ name, field, onFieldChange }) { if (field.style === 'toggle') { return jsx(Toggle, { name: name, field: field, onFieldChange: onFieldChange }); } return jsx(Checkbox, { name: name, field: field, onFieldChange: onFieldChange }); }