@onesy/style-react
Version:
Onesy CSS in JS styling solution for React
53 lines (48 loc) • 1.45 kB
JavaScript
import React from 'react';
import hash from '@onesy/utils/hash';
import merge from '@onesy/utils/merge';
import { inline as onesyInlineMethod } from '@onesy/style';
import { useOnesyStyle, useOnesyTheme } from '.';
export default function inline(value_, props) {
let options_ = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {
response: 'json'
};
const [value, setValue] = React.useState(undefined);
const onesyStyle = useOnesyStyle();
const onesyTheme = useOnesyTheme();
const update = function () {
let update_ = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true;
const options = merge(options_, {
onesy_style: {
value: onesyStyle
},
onesy_theme: {
value: onesyTheme
}
}, {
copy: true
});
// Options response value
options.response = 'json';
const valueNew = onesyInlineMethod(value_, props, options);
if (update_) setValue(valueNew);
return valueNew;
};
// Update
React.useEffect(() => {
update();
if (onesyTheme) onesyTheme.subscriptions.update.subscribe(update);
// Clean up
return () => {
// Unsubscribe
if (onesyTheme) onesyTheme.subscriptions.update.unsubscribe(update);
};
}, []);
// Update props
React.useEffect(() => {
update();
}, [hash(props)]);
// Important for ssr value
const value__ = value || update(false);
return value__;
}