@agnos-ui/core
Version:
Framework-agnostic headless component library.
38 lines (37 loc) • 1.67 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
const tansu = require("@amadeus-it-group/tansu");
const utils_stores = require("../utils/stores.cjs");
const types = require("../types.cjs");
const extendWidgetProps = (factory, extraPropsDefaults, extraPropsConfig, overrideDefaults) => {
const extendedFactory = (propsConfig) => {
const extraPropsWritables = utils_stores.writablesWithDefault(extraPropsDefaults, propsConfig, extraPropsConfig);
const propsConfigConfig = propsConfig == null ? void 0 : propsConfig.config;
const config = utils_stores.isStore(propsConfigConfig) ? tansu.computed(() => ({ ...overrideDefaults, ...propsConfigConfig() })) : { ...overrideDefaults, ...propsConfigConfig ?? {} };
const widget = factory({ props: propsConfig == null ? void 0 : propsConfig.props, config });
return {
...widget,
...utils_stores.stateStores({ ...widget.stores, ...extraPropsWritables }),
patch: (storesValues) => tansu.batch(() => {
let widgetProps;
for (const [name, value] of Object.entries(storesValues ?? {})) {
const extraPropsStore = extraPropsWritables[`${name}$`];
if (extraPropsStore) {
extraPropsStore.set(value);
} else {
if (!widgetProps) {
widgetProps = {};
}
widgetProps[name] = value;
}
}
if (widgetProps) {
widget.patch(widgetProps);
}
})
};
};
extendedFactory[types.FACTORY_WIDGET_NAME] = factory[types.FACTORY_WIDGET_NAME];
return extendedFactory;
};
exports.extendWidgetProps = extendWidgetProps;