@webiny/react-properties 5.39.3 → 5.40.0-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/Properties.js
CHANGED
|
@@ -32,7 +32,7 @@ function putPropertyBefore(properties, property, before) {
|
|
|
32
32
|
var newProperties = properties.filter(function (p) {
|
|
33
33
|
return p.id !== property.id;
|
|
34
34
|
});
|
|
35
|
-
var _targetIndex = newProperties.findIndex(function (prop) {
|
|
35
|
+
var _targetIndex = before.endsWith("$first") ? 0 : newProperties.findIndex(function (prop) {
|
|
36
36
|
return prop.id === before;
|
|
37
37
|
});
|
|
38
38
|
return [].concat((0, _toConsumableArray2.default)(newProperties.slice(0, _targetIndex)), [existingProperty], (0, _toConsumableArray2.default)(newProperties.slice(_targetIndex)));
|
|
@@ -50,7 +50,7 @@ function putPropertyAfter(properties, property, after) {
|
|
|
50
50
|
var _properties$splice = properties.splice(existingIndex, 1),
|
|
51
51
|
_properties$splice2 = (0, _slicedToArray2.default)(_properties$splice, 1),
|
|
52
52
|
removedProperty = _properties$splice2[0];
|
|
53
|
-
var _targetIndex2 = properties.findIndex(function (prop) {
|
|
53
|
+
var _targetIndex2 = after.endsWith("$last") ? properties.length - 1 : properties.findIndex(function (prop) {
|
|
54
54
|
return prop.id === after;
|
|
55
55
|
});
|
|
56
56
|
return [].concat((0, _toConsumableArray2.default)(properties.slice(0, _targetIndex2 + 1)), [removedProperty], (0, _toConsumableArray2.default)(properties.slice(_targetIndex2 + 1)));
|
package/Properties.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_utils","removeByParent","id","properties","filter","prop","parent","reduce","acc","item","putPropertyBefore","property","before","existingIndex","findIndex","existingProperty","newProperties","p","targetIndex","concat","_toConsumableArray2","default","slice","putPropertyAfter","after","_properties$splice","splice","_properties$splice2","_slicedToArray2","removedProperty","mergeProperty","index","_objectSpread2","PropertiesContext","createContext","undefined","Properties","_ref","onChange","children","_useState","useState","_useState2","setProperties","useEffect","context","useMemo","getObject","toObject","addProperty","options","arguments","length","removeProperty","replaceProperty","toReplace","createElement","Provider","value","exports","useProperties","useContext","Error","PropertyContext","useParentProperty","useAncestor","params","_useProperties","matchOrGetAncestor","matchedProps","name","Object","keys","newParent","find","Property","_ref2","_ref2$after","_ref2$before","_ref2$replace","replace","_ref2$remove","remove","_ref2$array","array","_ref2$root","root","_ref2$parent","uniqueId","getUniqueId","parentProperty","parentId"],"sources":["Properties.tsx"],"sourcesContent":["import React, { createContext, useContext, useEffect, useMemo, useState } from \"react\";\nimport { getUniqueId, toObject } from \"./utils\";\n\nexport interface Property {\n id: string;\n parent: string;\n name: string;\n value?: unknown;\n array?: boolean;\n}\n\nfunction removeByParent(id: string, properties: Property[]): Property[] {\n return properties\n .filter(prop => prop.parent === id)\n .reduce((acc, item) => {\n return removeByParent(\n item.id,\n acc.filter(prop => prop.id !== item.id)\n );\n }, properties);\n}\n\ninterface AddPropertyOptions {\n after?: string;\n before?: string;\n}\n\ninterface PropertiesContext {\n properties: Property[];\n getObject<T = unknown>(): T;\n addProperty(property: Property, options?: AddPropertyOptions): void;\n removeProperty(id: string): void;\n replaceProperty(id: string, property: Property): void;\n}\n\nfunction putPropertyBefore(properties: Property[], property: Property, before: string) {\n const existingIndex = properties.findIndex(prop => prop.id === property.id);\n if (existingIndex > -1) {\n const existingProperty = properties[existingIndex];\n const newProperties = properties.filter(p => p.id !== property.id);\n const targetIndex = newProperties.findIndex(prop => prop.id === before);\n return [\n ...newProperties.slice(0, targetIndex),\n existingProperty,\n ...newProperties.slice(targetIndex)\n ];\n }\n\n const targetIndex = properties.findIndex(prop => prop.id === before);\n\n return [...properties.slice(0, targetIndex), property, ...properties.slice(targetIndex)];\n}\n\nfunction putPropertyAfter(properties: Property[], property: Property, after: string) {\n const existingIndex = properties.findIndex(prop => prop.id === property.id);\n\n if (existingIndex > -1) {\n const [removedProperty] = properties.splice(existingIndex, 1);\n const targetIndex = properties.findIndex(prop => prop.id === after);\n return [\n ...properties.slice(0, targetIndex + 1),\n removedProperty,\n ...properties.slice(targetIndex + 1)\n ];\n }\n\n const targetIndex = properties.findIndex(prop => prop.id === after);\n\n return [\n ...properties.slice(0, targetIndex + 1),\n property,\n ...properties.slice(targetIndex + 1)\n ];\n}\n\nfunction mergeProperty(properties: Property[], property: Property) {\n const index = properties.findIndex(prop => prop.id === property.id);\n if (index > -1) {\n return [\n ...properties.slice(0, index),\n { ...properties[index], ...property },\n ...properties.slice(index + 1)\n ];\n }\n return properties;\n}\n\nconst PropertiesContext = createContext<PropertiesContext | undefined>(undefined);\n\ninterface PropertiesProps {\n onChange?(properties: Property[]): void;\n children: React.ReactNode;\n}\n\nexport const Properties = ({ onChange, children }: PropertiesProps) => {\n const [properties, setProperties] = useState<Property[]>([]);\n\n useEffect(() => {\n if (onChange) {\n onChange(properties);\n }\n }, [properties]);\n\n const context: PropertiesContext = useMemo(\n () => ({\n properties,\n getObject<T>() {\n return toObject(properties) as T;\n },\n addProperty(property, options = {}) {\n setProperties(properties => {\n const index = properties.findIndex(prop => prop.id === property.id);\n\n if (index > -1) {\n const newProperties = mergeProperty(properties, property);\n if (options.after) {\n return putPropertyAfter(newProperties, property, options.after);\n }\n if (options.before) {\n return putPropertyBefore(newProperties, property, options.before);\n }\n\n return newProperties;\n }\n\n if (options.after) {\n return putPropertyAfter(properties, property, options.after);\n }\n\n if (options.before) {\n return putPropertyBefore(properties, property, options.before);\n }\n\n return [...properties, property];\n });\n },\n removeProperty(id) {\n setProperties(properties => {\n return removeByParent(\n id,\n properties.filter(prop => prop.id !== id)\n );\n });\n },\n replaceProperty(id, property) {\n setProperties(properties => {\n const toReplace = properties.findIndex(prop => prop.id === id);\n\n if (toReplace > -1) {\n // Replace the property and remove all remaining child properties.\n return removeByParent(id, [\n ...properties.slice(0, toReplace),\n property,\n ...properties.slice(toReplace + 1)\n ]);\n }\n return properties;\n });\n }\n }),\n [properties]\n );\n\n return <PropertiesContext.Provider value={context}>{children}</PropertiesContext.Provider>;\n};\n\nexport function useProperties() {\n const properties = useContext(PropertiesContext);\n if (!properties) {\n throw Error(\"Properties context provider is missing!\");\n }\n\n return properties;\n}\n\ninterface PropertyProps {\n id?: string;\n name: string;\n value?: unknown;\n array?: boolean;\n after?: string;\n before?: string;\n replace?: string;\n remove?: boolean;\n parent?: string;\n root?: boolean;\n children?: React.ReactNode;\n}\n\nconst PropertyContext = createContext<Property | undefined>(undefined);\n\nexport function useParentProperty() {\n return useContext(PropertyContext);\n}\n\ninterface AncestorMatch {\n [key: string]: string | boolean | number | null | undefined;\n}\n\nexport function useAncestor(params: AncestorMatch) {\n const property = useParentProperty();\n const { properties } = useProperties();\n\n const matchOrGetAncestor = (\n property: Property,\n params: AncestorMatch\n ): Property | undefined => {\n const matchedProps = properties\n .filter(prop => prop.parent === property.id)\n .filter(prop => prop.name in params && prop.value === params[prop.name]);\n\n if (matchedProps.length === Object.keys(params).length) {\n return property;\n }\n\n const newParent = property.parent\n ? properties.find(prop => prop.id === property.parent)\n : undefined;\n\n return newParent ? matchOrGetAncestor(newParent, params) : undefined;\n };\n\n return property ? matchOrGetAncestor(property, params) : undefined;\n}\n\nexport const Property = ({\n id,\n name,\n value,\n children,\n after = undefined,\n before = undefined,\n replace = undefined,\n remove = false,\n array = false,\n root = false,\n parent = undefined\n}: PropertyProps) => {\n const uniqueId = useMemo(() => id || getUniqueId(), []);\n const parentProperty = useParentProperty();\n const properties = useProperties();\n\n if (!properties) {\n throw Error(\"<Properties> provider is missing higher in the hierarchy!\");\n }\n\n const { addProperty, removeProperty, replaceProperty } = properties;\n const parentId = parent ? parent : root ? \"\" : parentProperty?.id || \"\";\n const property = { id: uniqueId, name, value, parent: parentId, array };\n\n useEffect(() => {\n if (remove) {\n removeProperty(uniqueId);\n return;\n }\n\n if (replace) {\n replaceProperty(replace, property);\n return;\n }\n\n addProperty(property, { after, before });\n\n return () => {\n removeProperty(uniqueId);\n };\n }, []);\n\n if (children) {\n return <PropertyContext.Provider value={property}>{children}</PropertyContext.Provider>;\n }\n\n return null;\n};\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_utils","removeByParent","id","properties","filter","prop","parent","reduce","acc","item","putPropertyBefore","property","before","existingIndex","findIndex","existingProperty","newProperties","p","targetIndex","endsWith","concat","_toConsumableArray2","default","slice","putPropertyAfter","after","_properties$splice","splice","_properties$splice2","_slicedToArray2","removedProperty","length","mergeProperty","index","_objectSpread2","PropertiesContext","createContext","undefined","Properties","_ref","onChange","children","_useState","useState","_useState2","setProperties","useEffect","context","useMemo","getObject","toObject","addProperty","options","arguments","removeProperty","replaceProperty","toReplace","createElement","Provider","value","exports","useProperties","useContext","Error","PropertyContext","useParentProperty","useAncestor","params","_useProperties","matchOrGetAncestor","matchedProps","name","Object","keys","newParent","find","Property","_ref2","_ref2$after","_ref2$before","_ref2$replace","replace","_ref2$remove","remove","_ref2$array","array","_ref2$root","root","_ref2$parent","uniqueId","getUniqueId","parentProperty","parentId"],"sources":["Properties.tsx"],"sourcesContent":["import React, { createContext, useContext, useEffect, useMemo, useState } from \"react\";\nimport { getUniqueId, toObject } from \"./utils\";\n\nexport interface Property {\n id: string;\n parent: string;\n name: string;\n value?: unknown;\n array?: boolean;\n}\n\nfunction removeByParent(id: string, properties: Property[]): Property[] {\n return properties\n .filter(prop => prop.parent === id)\n .reduce((acc, item) => {\n return removeByParent(\n item.id,\n acc.filter(prop => prop.id !== item.id)\n );\n }, properties);\n}\n\ninterface AddPropertyOptions {\n after?: string;\n before?: string;\n}\n\ninterface PropertiesContext {\n properties: Property[];\n getObject<T = unknown>(): T;\n addProperty(property: Property, options?: AddPropertyOptions): void;\n removeProperty(id: string): void;\n replaceProperty(id: string, property: Property): void;\n}\n\nfunction putPropertyBefore(properties: Property[], property: Property, before: string) {\n const existingIndex = properties.findIndex(prop => prop.id === property.id);\n if (existingIndex > -1) {\n const existingProperty = properties[existingIndex];\n const newProperties = properties.filter(p => p.id !== property.id);\n const targetIndex = before.endsWith(\"$first\")\n ? 0\n : newProperties.findIndex(prop => prop.id === before);\n return [\n ...newProperties.slice(0, targetIndex),\n existingProperty,\n ...newProperties.slice(targetIndex)\n ];\n }\n\n const targetIndex = properties.findIndex(prop => prop.id === before);\n\n return [...properties.slice(0, targetIndex), property, ...properties.slice(targetIndex)];\n}\n\nfunction putPropertyAfter(properties: Property[], property: Property, after: string) {\n const existingIndex = properties.findIndex(prop => prop.id === property.id);\n\n if (existingIndex > -1) {\n const [removedProperty] = properties.splice(existingIndex, 1);\n const targetIndex = after.endsWith(\"$last\")\n ? properties.length - 1\n : properties.findIndex(prop => prop.id === after);\n return [\n ...properties.slice(0, targetIndex + 1),\n removedProperty,\n ...properties.slice(targetIndex + 1)\n ];\n }\n\n const targetIndex = properties.findIndex(prop => prop.id === after);\n\n return [\n ...properties.slice(0, targetIndex + 1),\n property,\n ...properties.slice(targetIndex + 1)\n ];\n}\n\nfunction mergeProperty(properties: Property[], property: Property) {\n const index = properties.findIndex(prop => prop.id === property.id);\n if (index > -1) {\n return [\n ...properties.slice(0, index),\n { ...properties[index], ...property },\n ...properties.slice(index + 1)\n ];\n }\n return properties;\n}\n\nconst PropertiesContext = createContext<PropertiesContext | undefined>(undefined);\n\ninterface PropertiesProps {\n onChange?(properties: Property[]): void;\n children: React.ReactNode;\n}\n\nexport const Properties = ({ onChange, children }: PropertiesProps) => {\n const [properties, setProperties] = useState<Property[]>([]);\n\n useEffect(() => {\n if (onChange) {\n onChange(properties);\n }\n }, [properties]);\n\n const context: PropertiesContext = useMemo(\n () => ({\n properties,\n getObject<T>() {\n return toObject(properties) as T;\n },\n addProperty(property, options = {}) {\n setProperties(properties => {\n const index = properties.findIndex(prop => prop.id === property.id);\n\n if (index > -1) {\n const newProperties = mergeProperty(properties, property);\n if (options.after) {\n return putPropertyAfter(newProperties, property, options.after);\n }\n if (options.before) {\n return putPropertyBefore(newProperties, property, options.before);\n }\n\n return newProperties;\n }\n\n if (options.after) {\n return putPropertyAfter(properties, property, options.after);\n }\n\n if (options.before) {\n return putPropertyBefore(properties, property, options.before);\n }\n\n return [...properties, property];\n });\n },\n removeProperty(id) {\n setProperties(properties => {\n return removeByParent(\n id,\n properties.filter(prop => prop.id !== id)\n );\n });\n },\n replaceProperty(id, property) {\n setProperties(properties => {\n const toReplace = properties.findIndex(prop => prop.id === id);\n\n if (toReplace > -1) {\n // Replace the property and remove all remaining child properties.\n return removeByParent(id, [\n ...properties.slice(0, toReplace),\n property,\n ...properties.slice(toReplace + 1)\n ]);\n }\n return properties;\n });\n }\n }),\n [properties]\n );\n\n return <PropertiesContext.Provider value={context}>{children}</PropertiesContext.Provider>;\n};\n\nexport function useProperties() {\n const properties = useContext(PropertiesContext);\n if (!properties) {\n throw Error(\"Properties context provider is missing!\");\n }\n\n return properties;\n}\n\ninterface PropertyProps {\n id?: string;\n name: string;\n value?: unknown;\n array?: boolean;\n after?: string;\n before?: string;\n replace?: string;\n remove?: boolean;\n parent?: string;\n root?: boolean;\n children?: React.ReactNode;\n}\n\nconst PropertyContext = createContext<Property | undefined>(undefined);\n\nexport function useParentProperty() {\n return useContext(PropertyContext);\n}\n\ninterface AncestorMatch {\n [key: string]: string | boolean | number | null | undefined;\n}\n\nexport function useAncestor(params: AncestorMatch) {\n const property = useParentProperty();\n const { properties } = useProperties();\n\n const matchOrGetAncestor = (\n property: Property,\n params: AncestorMatch\n ): Property | undefined => {\n const matchedProps = properties\n .filter(prop => prop.parent === property.id)\n .filter(prop => prop.name in params && prop.value === params[prop.name]);\n\n if (matchedProps.length === Object.keys(params).length) {\n return property;\n }\n\n const newParent = property.parent\n ? properties.find(prop => prop.id === property.parent)\n : undefined;\n\n return newParent ? matchOrGetAncestor(newParent, params) : undefined;\n };\n\n return property ? matchOrGetAncestor(property, params) : undefined;\n}\n\nexport const Property = ({\n id,\n name,\n value,\n children,\n after = undefined,\n before = undefined,\n replace = undefined,\n remove = false,\n array = false,\n root = false,\n parent = undefined\n}: PropertyProps) => {\n const uniqueId = useMemo(() => id || getUniqueId(), []);\n const parentProperty = useParentProperty();\n const properties = useProperties();\n\n if (!properties) {\n throw Error(\"<Properties> provider is missing higher in the hierarchy!\");\n }\n\n const { addProperty, removeProperty, replaceProperty } = properties;\n const parentId = parent ? parent : root ? \"\" : parentProperty?.id || \"\";\n const property = { id: uniqueId, name, value, parent: parentId, array };\n\n useEffect(() => {\n if (remove) {\n removeProperty(uniqueId);\n return;\n }\n\n if (replace) {\n replaceProperty(replace, property);\n return;\n }\n\n addProperty(property, { after, before });\n\n return () => {\n removeProperty(uniqueId);\n };\n }, []);\n\n if (children) {\n return <PropertyContext.Provider value={property}>{children}</PropertyContext.Provider>;\n }\n\n return null;\n};\n"],"mappings":"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"}
|
|
@@ -4,10 +4,12 @@ export interface WithConfigProps {
|
|
|
4
4
|
children: React.ReactNode;
|
|
5
5
|
onProperties?(properties: Property[]): void;
|
|
6
6
|
}
|
|
7
|
+
export interface ConfigProps {
|
|
8
|
+
children: React.ReactNode;
|
|
9
|
+
priority?: "primary" | "secondary";
|
|
10
|
+
}
|
|
7
11
|
export declare function createConfigurableComponent<TConfig>(name: string): {
|
|
8
12
|
WithConfig: ({ onProperties, children }: WithConfigProps) => JSX.Element;
|
|
9
|
-
Config: ({ children }:
|
|
10
|
-
children: React.ReactNode;
|
|
11
|
-
}) => JSX.Element;
|
|
13
|
+
Config: ({ priority, children }: ConfigProps) => JSX.Element;
|
|
12
14
|
useConfig: <TExtra extends object>() => TConfig & TExtra;
|
|
13
15
|
};
|
|
@@ -22,18 +22,30 @@ function createConfigurableComponent(name) {
|
|
|
22
22
|
/**
|
|
23
23
|
* This component is used when we want to mount all composed configs.
|
|
24
24
|
*/
|
|
25
|
-
var
|
|
25
|
+
var ConfigApplyPrimary = (0, _reactComposition.makeDecoratable)("".concat(name, "ConfigApply<Primary>"), function (_ref2) {
|
|
26
26
|
var children = _ref2.children;
|
|
27
27
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
|
|
28
28
|
});
|
|
29
|
+
var ConfigApplySecondary = (0, _reactComposition.makeDecoratable)("".concat(name, "ConfigApply<Secondary>"), function (_ref3) {
|
|
30
|
+
var children = _ref3.children;
|
|
31
|
+
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
|
|
32
|
+
});
|
|
29
33
|
|
|
30
34
|
/**
|
|
31
35
|
* This component is used to configure the component (it can be mounted many times).
|
|
32
36
|
*/
|
|
33
|
-
var Config = function Config(
|
|
34
|
-
var
|
|
37
|
+
var Config = function Config(_ref4) {
|
|
38
|
+
var _ref4$priority = _ref4.priority,
|
|
39
|
+
priority = _ref4$priority === void 0 ? "primary" : _ref4$priority,
|
|
40
|
+
children = _ref4.children;
|
|
41
|
+
if (priority === "primary") {
|
|
42
|
+
return /*#__PURE__*/_react.default.createElement(_reactComposition.Compose, {
|
|
43
|
+
component: ConfigApplyPrimary,
|
|
44
|
+
with: createHOC(children)
|
|
45
|
+
});
|
|
46
|
+
}
|
|
35
47
|
return /*#__PURE__*/_react.default.createElement(_reactComposition.Compose, {
|
|
36
|
-
component:
|
|
48
|
+
component: ConfigApplySecondary,
|
|
37
49
|
with: createHOC(children)
|
|
38
50
|
});
|
|
39
51
|
};
|
|
@@ -41,9 +53,9 @@ function createConfigurableComponent(name) {
|
|
|
41
53
|
properties: []
|
|
42
54
|
};
|
|
43
55
|
var ViewContext = /*#__PURE__*/_react.default.createContext(defaultContext);
|
|
44
|
-
var WithConfig = function WithConfig(
|
|
45
|
-
var onProperties =
|
|
46
|
-
children =
|
|
56
|
+
var WithConfig = function WithConfig(_ref5) {
|
|
57
|
+
var onProperties = _ref5.onProperties,
|
|
58
|
+
children = _ref5.children;
|
|
47
59
|
var _useState = (0, _react.useState)([]),
|
|
48
60
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
49
61
|
properties = _useState2[0],
|
|
@@ -63,7 +75,7 @@ function createConfigurableComponent(name) {
|
|
|
63
75
|
value: context
|
|
64
76
|
}, /*#__PURE__*/_react.default.createElement(_index.Properties, {
|
|
65
77
|
onChange: stateUpdater
|
|
66
|
-
}, /*#__PURE__*/_react.default.createElement(
|
|
78
|
+
}, /*#__PURE__*/_react.default.createElement(ConfigApplyPrimary, null), /*#__PURE__*/_react.default.createElement(ConfigApplySecondary, null), children));
|
|
67
79
|
};
|
|
68
80
|
function useConfig() {
|
|
69
81
|
var _useContext = (0, _react.useContext)(ViewContext),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactComposition","_index","createHOC","newChildren","BaseComponent","ConfigHOC","_ref","children","default","createElement","createConfigurableComponent","name","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_reactComposition","_index","createHOC","newChildren","BaseComponent","ConfigHOC","_ref","children","default","createElement","createConfigurableComponent","name","ConfigApplyPrimary","makeDecoratable","concat","_ref2","Fragment","ConfigApplySecondary","_ref3","Config","_ref4","_ref4$priority","priority","Compose","component","with","defaultContext","properties","ViewContext","React","createContext","WithConfig","_ref5","onProperties","_useState","useState","_useState2","_slicedToArray2","setProperties","context","useEffect","stateUpdater","Provider","value","Properties","onChange","useConfig","_useContext","useContext","useMemo","toObject"],"sources":["createConfigurableComponent.tsx"],"sourcesContent":["import React, { useContext, useEffect, useMemo, useState } from \"react\";\nimport { Compose, Decorator, makeDecoratable } from \"@webiny/react-composition\";\nimport { Property, Properties, toObject } from \"~/index\";\nimport { GenericComponent } from \"@webiny/react-composition/types\";\n\nconst createHOC =\n (newChildren: React.ReactNode): Decorator<GenericComponent<{ children?: React.ReactNode }>> =>\n BaseComponent => {\n return function ConfigHOC({ children }) {\n return (\n <BaseComponent>\n {newChildren}\n {children}\n </BaseComponent>\n );\n };\n };\n\nexport interface WithConfigProps {\n children: React.ReactNode;\n onProperties?(properties: Property[]): void;\n}\n\ninterface ConfigApplyProps {\n children?: React.ReactNode;\n}\n\nexport interface ConfigProps {\n children: React.ReactNode;\n priority?: \"primary\" | \"secondary\";\n}\n\nexport function createConfigurableComponent<TConfig>(name: string) {\n /**\n * This component is used when we want to mount all composed configs.\n */\n const ConfigApplyPrimary = makeDecoratable(\n `${name}ConfigApply<Primary>`,\n ({ children }: ConfigApplyProps) => {\n return <>{children}</>;\n }\n );\n\n const ConfigApplySecondary = makeDecoratable(\n `${name}ConfigApply<Secondary>`,\n ({ children }: ConfigApplyProps) => {\n return <>{children}</>;\n }\n );\n\n /**\n * This component is used to configure the component (it can be mounted many times).\n */\n const Config = ({ priority = \"primary\", children }: ConfigProps) => {\n if (priority === \"primary\") {\n return <Compose component={ConfigApplyPrimary} with={createHOC(children)} />;\n }\n return <Compose component={ConfigApplySecondary} with={createHOC(children)} />;\n };\n\n interface ViewContext {\n properties: Property[];\n }\n\n const defaultContext = { properties: [] };\n\n const ViewContext = React.createContext<ViewContext>(defaultContext);\n\n const WithConfig = ({ onProperties, children }: WithConfigProps) => {\n const [properties, setProperties] = useState<Property[]>([]);\n const context = { properties };\n\n useEffect(() => {\n if (typeof onProperties === \"function\") {\n onProperties(properties);\n }\n }, [properties]);\n\n const stateUpdater = (properties: Property[]) => {\n setProperties(properties);\n };\n\n return (\n <ViewContext.Provider value={context}>\n <Properties onChange={stateUpdater}>\n <ConfigApplyPrimary />\n <ConfigApplySecondary />\n {children}\n </Properties>\n </ViewContext.Provider>\n );\n };\n\n function useConfig<TExtra extends object>(): TConfig & TExtra {\n const { properties } = useContext(ViewContext);\n return useMemo(() => toObject<TConfig & TExtra>(properties), [properties]);\n }\n\n return {\n WithConfig,\n Config,\n useConfig\n };\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/react-properties",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.40.0-beta.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -12,14 +12,14 @@
|
|
|
12
12
|
"dependencies": {
|
|
13
13
|
"@babel/runtime": "7.22.6",
|
|
14
14
|
"@types/react": "17.0.39",
|
|
15
|
-
"@webiny/react-composition": "5.
|
|
15
|
+
"@webiny/react-composition": "5.40.0-beta.0",
|
|
16
16
|
"nanoid": "3.3.4",
|
|
17
17
|
"react": "17.0.2"
|
|
18
18
|
},
|
|
19
19
|
"devDependencies": {
|
|
20
20
|
"@testing-library/react": "12.1.5",
|
|
21
|
-
"@webiny/cli": "5.
|
|
22
|
-
"@webiny/project-utils": "5.
|
|
21
|
+
"@webiny/cli": "5.40.0-beta.0",
|
|
22
|
+
"@webiny/project-utils": "5.40.0-beta.0",
|
|
23
23
|
"prettier": "2.8.8"
|
|
24
24
|
},
|
|
25
25
|
"publishConfig": {
|
|
@@ -30,5 +30,5 @@
|
|
|
30
30
|
"build": "yarn webiny run build",
|
|
31
31
|
"watch": "yarn webiny run watch"
|
|
32
32
|
},
|
|
33
|
-
"gitHead": "
|
|
33
|
+
"gitHead": "d716758f56ca020dfaf8147cd908dddfaaf0937f"
|
|
34
34
|
}
|