@appbuckets/react-ui
Version:
Just Another React UI Framework
158 lines (151 loc) • 4.39 kB
JavaScript
;
var tslib = require('tslib');
var React = require('react');
var clsx = require('clsx');
var reactUiCore = require('@appbuckets/react-ui-core');
require('../BucketTheme/BucketTheme.js');
var BucketContext = require('../BucketTheme/BucketContext.js');
var useField = require('../hooks/useField.js');
var customHook = require('../utils/customHook.js');
var Field = require('../Field/Field.js');
var RadioOption = require('./RadioOption.js');
var Radio_context = require('./Radio.context.js');
function _interopDefaultLegacy(e) {
return e && typeof e === 'object' && 'default' in e ? e : { default: e };
}
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(
n,
k,
d.get
? d
: {
enumerable: true,
get: function () {
return e[k];
},
}
);
}
});
}
n['default'] = e;
return Object.freeze(n);
}
var React__namespace = /*#__PURE__*/ _interopNamespace(React);
var clsx__default = /*#__PURE__*/ _interopDefaultLegacy(clsx);
var Radio = function (receivedProps) {
var props = BucketContext.useWithDefaultProps('radio', receivedProps);
var _a = customHook.useSharedClassName(props),
className = _a.className,
_b = _a.rest,
/** Strict RadioGroup Props */
children = _b.children;
_b.columnsCount;
var content = _b.content,
userDefinedDefaultValue = _b.defaultValue,
userDefinedOnChangeHandler = _b.onChange,
options = _b.options,
stacked = _b.stacked,
userDefinedValue = _b.value,
rawRest = tslib.__rest(_b, [
'children',
'columnsCount',
'content',
'defaultValue',
'onChange',
'options',
'stacked',
'value',
]);
// ----
// AutoController Radio Value
// ----
var _c = tslib.__read(
reactUiCore.useAutoControlledValue(undefined, {
prop: userDefinedValue,
defaultProp: userDefinedDefaultValue,
}),
2
),
value = _c[0],
trySetValue = _c[1];
// ----
// Build Field and Helpers
// ----
var _d = useField.useField(rawRest),
fieldRef = _d.fieldRef,
fieldProps = _d.fieldProps;
_d.rest;
var helpers = tslib.__rest(_d, ['fieldRef', 'fieldProps', 'rest']);
// ----
// Context Value
// ----
var ctx = {
currentValue: value,
setValue: function (event, newValue) {
/** Set the field as touched and dirty */
helpers.setFieldChanged();
helpers.setFieldClicked();
/** Call user defined handler if exists */
if (typeof userDefinedOnChangeHandler === 'function') {
userDefinedOnChangeHandler(
event,
tslib.__assign(tslib.__assign({}, props), { value: newValue })
);
}
/** Try to change the value */
trySetValue(newValue);
},
};
// ----
// Render the Component
// ----
var classes = clsx__default['default'](
'radio-group',
{ stacked: stacked },
className
);
if (Array.isArray(options)) {
return React__namespace.createElement(
Radio_context.RadioContextProvider,
{ value: ctx },
React__namespace.createElement(
Field,
tslib.__assign({ ref: fieldRef }, fieldProps, { className: classes }),
options.map(function (option) {
return RadioOption.create(option, {
autoGenerateKey: false,
defaultProps: {
appearance: fieldProps.appearance,
danger: fieldProps.danger,
info: fieldProps.info,
primary: fieldProps.primary,
secondary: fieldProps.secondary,
success: fieldProps.success,
warning: fieldProps.warning,
},
});
})
)
);
}
return React__namespace.createElement(
Radio_context.RadioContextProvider,
{ value: ctx },
React__namespace.createElement(
Field,
tslib.__assign({ ref: fieldRef }, fieldProps, { className: classes }),
reactUiCore.childrenUtils.isNil(children) ? content : children
)
);
};
Radio.Option = RadioOption;
Radio.displayName = 'Radio';
module.exports = Radio;