@apia/util 2.0.11 → 3.0.2
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/dist/index.d.ts +1865 -68
- package/dist/index.js +2650 -62
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
- package/dist/animate/index.d.ts +0 -4
- package/dist/animate/index.d.ts.map +0 -1
- package/dist/animate/index.js +0 -24
- package/dist/animate/index.js.map +0 -1
- package/dist/array/arrayOrArray.d.ts +0 -4
- package/dist/array/arrayOrArray.d.ts.map +0 -1
- package/dist/array/arrayOrArray.js +0 -8
- package/dist/array/arrayOrArray.js.map +0 -1
- package/dist/array/getIndex.d.ts +0 -14
- package/dist/array/getIndex.d.ts.map +0 -1
- package/dist/array/getIndex.js +0 -12
- package/dist/array/getIndex.js.map +0 -1
- package/dist/crypto/decrypt.d.ts +0 -4
- package/dist/crypto/decrypt.d.ts.map +0 -1
- package/dist/crypto/decrypt.js +0 -16
- package/dist/crypto/decrypt.js.map +0 -1
- package/dist/crypto/encrypt.d.ts +0 -4
- package/dist/crypto/encrypt.d.ts.map +0 -1
- package/dist/crypto/encrypt.js +0 -13
- package/dist/crypto/encrypt.js.map +0 -1
- package/dist/crypto/generateKey.js +0 -11
- package/dist/crypto/generateKey.js.map +0 -1
- package/dist/date/apiaDateToStandarFormat.d.ts +0 -4
- package/dist/date/apiaDateToStandarFormat.d.ts.map +0 -1
- package/dist/date/apiaDateToStandarFormat.js +0 -12
- package/dist/date/apiaDateToStandarFormat.js.map +0 -1
- package/dist/date/dateToApiaFormat.d.ts +0 -4
- package/dist/date/dateToApiaFormat.d.ts.map +0 -1
- package/dist/date/dateToApiaFormat.js +0 -9
- package/dist/date/dateToApiaFormat.js.map +0 -1
- package/dist/date/getDateFormat.d.ts +0 -11
- package/dist/date/getDateFormat.d.ts.map +0 -1
- package/dist/date/getDateFormat.js +0 -20
- package/dist/date/getDateFormat.js.map +0 -1
- package/dist/debug/debugDispatcher.d.ts +0 -36
- package/dist/debug/debugDispatcher.d.ts.map +0 -1
- package/dist/debug/debugDispatcher.js +0 -75
- package/dist/debug/debugDispatcher.js.map +0 -1
- package/dist/debug/shortcutController.d.ts +0 -57
- package/dist/debug/shortcutController.d.ts.map +0 -1
- package/dist/debug/shortcutController.js +0 -152
- package/dist/debug/shortcutController.js.map +0 -1
- package/dist/documents/downloadStringAsDoc.d.ts +0 -8
- package/dist/documents/downloadStringAsDoc.d.ts.map +0 -1
- package/dist/documents/downloadStringAsDoc.js +0 -12
- package/dist/documents/downloadStringAsDoc.js.map +0 -1
- package/dist/documents/downloadUrl.d.ts +0 -20
- package/dist/documents/downloadUrl.d.ts.map +0 -1
- package/dist/documents/downloadUrl.js +0 -18
- package/dist/documents/downloadUrl.js.map +0 -1
- package/dist/documents/openAndReadFile.d.ts +0 -4
- package/dist/documents/openAndReadFile.d.ts.map +0 -1
- package/dist/documents/openAndReadFile.js +0 -29
- package/dist/documents/openAndReadFile.js.map +0 -1
- package/dist/dom/autoDisconnectMutationObserver.d.ts +0 -17
- package/dist/dom/autoDisconnectMutationObserver.d.ts.map +0 -1
- package/dist/dom/autoDisconnectMutationObserver.js +0 -35
- package/dist/dom/autoDisconnectMutationObserver.js.map +0 -1
- package/dist/dom/customEvents.d.ts +0 -40
- package/dist/dom/customEvents.d.ts.map +0 -1
- package/dist/dom/customEvents.js +0 -34
- package/dist/dom/customEvents.js.map +0 -1
- package/dist/dom/enableChildrenFocus.d.ts +0 -18
- package/dist/dom/enableChildrenFocus.d.ts.map +0 -1
- package/dist/dom/enableChildrenFocus.js +0 -26
- package/dist/dom/enableChildrenFocus.js.map +0 -1
- package/dist/dom/findOffsetRelativeToScrollParent.d.ts +0 -7
- package/dist/dom/findOffsetRelativeToScrollParent.d.ts.map +0 -1
- package/dist/dom/findOffsetRelativeToScrollParent.js +0 -19
- package/dist/dom/findOffsetRelativeToScrollParent.js.map +0 -1
- package/dist/dom/findScrollContainer.d.ts +0 -8
- package/dist/dom/findScrollContainer.d.ts.map +0 -1
- package/dist/dom/findScrollContainer.js +0 -9
- package/dist/dom/findScrollContainer.js.map +0 -1
- package/dist/dom/getFocusSelector.d.ts +0 -25
- package/dist/dom/getFocusSelector.d.ts.map +0 -1
- package/dist/dom/getFocusSelector.js +0 -30
- package/dist/dom/getFocusSelector.js.map +0 -1
- package/dist/dom/getSpecificParent.d.ts +0 -23
- package/dist/dom/getSpecificParent.d.ts.map +0 -1
- package/dist/dom/getSpecificParent.js +0 -19
- package/dist/dom/getSpecificParent.js.map +0 -1
- package/dist/dom/isChild.d.ts +0 -13
- package/dist/dom/isChild.d.ts.map +0 -1
- package/dist/dom/isChild.js +0 -8
- package/dist/dom/isChild.js.map +0 -1
- package/dist/dom/scrollParentIntoElement.d.ts +0 -9
- package/dist/dom/scrollParentIntoElement.d.ts.map +0 -1
- package/dist/dom/scrollParentIntoElement.js +0 -24
- package/dist/dom/scrollParentIntoElement.js.map +0 -1
- package/dist/dom/url.d.ts +0 -18
- package/dist/dom/url.d.ts.map +0 -1
- package/dist/dom/url.js +0 -52
- package/dist/dom/url.js.map +0 -1
- package/dist/dom/usePanAndZoom.d.ts +0 -14
- package/dist/dom/usePanAndZoom.d.ts.map +0 -1
- package/dist/dom/usePanAndZoom.js +0 -111
- package/dist/dom/usePanAndZoom.js.map +0 -1
- package/dist/encoding/index.d.ts +0 -8
- package/dist/encoding/index.d.ts.map +0 -1
- package/dist/encoding/index.js +0 -12
- package/dist/encoding/index.js.map +0 -1
- package/dist/events/BouncingEmitter.d.ts +0 -67
- package/dist/events/BouncingEmitter.d.ts.map +0 -1
- package/dist/events/BouncingEmitter.js +0 -72
- package/dist/events/BouncingEmitter.js.map +0 -1
- package/dist/events/EventEmitter.d.ts +0 -47
- package/dist/events/EventEmitter.d.ts.map +0 -1
- package/dist/events/EventEmitter.js +0 -75
- package/dist/events/EventEmitter.js.map +0 -1
- package/dist/events/StatefulEmitter.d.ts +0 -44
- package/dist/events/StatefulEmitter.d.ts.map +0 -1
- package/dist/events/StatefulEmitter.js +0 -57
- package/dist/events/StatefulEmitter.js.map +0 -1
- package/dist/events/types.d.ts +0 -29
- package/dist/events/types.d.ts.map +0 -1
- package/dist/focus/focusController.d.ts +0 -108
- package/dist/focus/focusController.d.ts.map +0 -1
- package/dist/focus/focusController.js +0 -295
- package/dist/focus/focusController.js.map +0 -1
- package/dist/focus/globalFocus.d.ts +0 -24
- package/dist/focus/globalFocus.d.ts.map +0 -1
- package/dist/focus/globalFocus.js +0 -87
- package/dist/focus/globalFocus.js.map +0 -1
- package/dist/history/History.d.ts +0 -81
- package/dist/history/History.d.ts.map +0 -1
- package/dist/history/History.js +0 -122
- package/dist/history/History.js.map +0 -1
- package/dist/hooks/useCombinedRefs.d.ts +0 -18
- package/dist/hooks/useCombinedRefs.d.ts.map +0 -1
- package/dist/hooks/useCombinedRefs.js +0 -20
- package/dist/hooks/useCombinedRefs.js.map +0 -1
- package/dist/hooks/useDebouncedCallback.d.ts +0 -7
- package/dist/hooks/useDebouncedCallback.d.ts.map +0 -1
- package/dist/hooks/useDebouncedCallback.js +0 -21
- package/dist/hooks/useDebouncedCallback.js.map +0 -1
- package/dist/hooks/useLatest.d.ts +0 -13
- package/dist/hooks/useLatest.d.ts.map +0 -1
- package/dist/hooks/useLatest.js +0 -10
- package/dist/hooks/useLatest.js.map +0 -1
- package/dist/hooks/useMount.d.ts +0 -6
- package/dist/hooks/useMount.d.ts.map +0 -1
- package/dist/hooks/useMount.js +0 -14
- package/dist/hooks/useMount.js.map +0 -1
- package/dist/hooks/usePrevious.d.ts +0 -6
- package/dist/hooks/usePrevious.d.ts.map +0 -1
- package/dist/hooks/usePrevious.js +0 -12
- package/dist/hooks/usePrevious.js.map +0 -1
- package/dist/hooks/useShallowMemo.d.ts +0 -9
- package/dist/hooks/useShallowMemo.d.ts.map +0 -1
- package/dist/hooks/useShallowMemo.js +0 -42
- package/dist/hooks/useShallowMemo.js.map +0 -1
- package/dist/hooks/useStateRef.d.ts +0 -10
- package/dist/hooks/useStateRef.d.ts.map +0 -1
- package/dist/hooks/useStateRef.js +0 -11
- package/dist/hooks/useStateRef.js.map +0 -1
- package/dist/hooks/useSubscription.d.ts +0 -31
- package/dist/hooks/useSubscription.d.ts.map +0 -1
- package/dist/hooks/useSubscription.js +0 -21
- package/dist/hooks/useSubscription.js.map +0 -1
- package/dist/hooks/useUnmount.d.ts +0 -4
- package/dist/hooks/useUnmount.d.ts.map +0 -1
- package/dist/hooks/useUnmount.js +0 -10
- package/dist/hooks/useUnmount.js.map +0 -1
- package/dist/hooks/useUpdateEffect.d.ts +0 -10
- package/dist/hooks/useUpdateEffect.d.ts.map +0 -1
- package/dist/hooks/useUpdateEffect.js +0 -16
- package/dist/hooks/useUpdateEffect.js.map +0 -1
- package/dist/imperative/makeImperativeComponent.d.ts +0 -56
- package/dist/imperative/makeImperativeComponent.d.ts.map +0 -1
- package/dist/imperative/makeImperativeComponent.js +0 -43
- package/dist/imperative/makeImperativeComponent.js.map +0 -1
- package/dist/imperative/makeSingleImperativeComponent.d.ts +0 -15
- package/dist/imperative/makeSingleImperativeComponent.d.ts.map +0 -1
- package/dist/imperative/makeSingleImperativeComponent.js +0 -31
- package/dist/imperative/makeSingleImperativeComponent.js.map +0 -1
- package/dist/imperative/types.d.ts +0 -22
- package/dist/imperative/types.d.ts.map +0 -1
- package/dist/imperative/types.js +0 -8
- package/dist/imperative/types.js.map +0 -1
- package/dist/imperative/useImperativeComponentEvents.d.ts +0 -6
- package/dist/imperative/useImperativeComponentEvents.d.ts.map +0 -1
- package/dist/imperative/useImperativeComponentEvents.js +0 -35
- package/dist/imperative/useImperativeComponentEvents.js.map +0 -1
- package/dist/imperative/useImperativeIdentifierContext.d.ts +0 -14
- package/dist/imperative/useImperativeIdentifierContext.d.ts.map +0 -1
- package/dist/imperative/useImperativeIdentifierContext.js +0 -10
- package/dist/imperative/useImperativeIdentifierContext.js.map +0 -1
- package/dist/labels/formatMessage.d.ts +0 -19
- package/dist/labels/formatMessage.d.ts.map +0 -1
- package/dist/labels/formatMessage.js +0 -13
- package/dist/labels/formatMessage.js.map +0 -1
- package/dist/labels/getLabel.d.ts +0 -34
- package/dist/labels/getLabel.d.ts.map +0 -1
- package/dist/labels/getLabel.js +0 -18
- package/dist/labels/getLabel.js.map +0 -1
- package/dist/number/index.d.ts +0 -29
- package/dist/number/index.d.ts.map +0 -1
- package/dist/number/index.js +0 -43
- package/dist/number/index.js.map +0 -1
- package/dist/objects/getValueByPath.d.ts +0 -23
- package/dist/objects/getValueByPath.d.ts.map +0 -1
- package/dist/objects/getValueByPath.js +0 -19
- package/dist/objects/getValueByPath.js.map +0 -1
- package/dist/objects/setValueByPath.d.ts +0 -33
- package/dist/objects/setValueByPath.d.ts.map +0 -1
- package/dist/objects/setValueByPath.js +0 -35
- package/dist/objects/setValueByPath.js.map +0 -1
- package/dist/propsStore/propsStore.d.ts +0 -42
- package/dist/propsStore/propsStore.d.ts.map +0 -1
- package/dist/propsStore/propsStore.js +0 -157
- package/dist/propsStore/propsStore.js.map +0 -1
- package/dist/propsStore/types.d.ts +0 -24
- package/dist/propsStore/types.d.ts.map +0 -1
- package/dist/propsStore/usePropsSelector.d.ts +0 -67
- package/dist/propsStore/usePropsSelector.d.ts.map +0 -1
- package/dist/propsStore/usePropsSelector.js +0 -92
- package/dist/propsStore/usePropsSelector.js.map +0 -1
- package/dist/screenLock/screenLocker.d.ts +0 -60
- package/dist/screenLock/screenLocker.d.ts.map +0 -1
- package/dist/screenLock/screenLocker.js +0 -95
- package/dist/screenLock/screenLocker.js.map +0 -1
- package/dist/states/useDebouncedState.d.ts +0 -10
- package/dist/states/useDebouncedState.d.ts.map +0 -1
- package/dist/states/useDebouncedState.js +0 -22
- package/dist/states/useDebouncedState.js.map +0 -1
- package/dist/states/useDomState.d.ts +0 -86
- package/dist/states/useDomState.d.ts.map +0 -1
- package/dist/states/useDomState.js +0 -35
- package/dist/states/useDomState.js.map +0 -1
- package/dist/storage/StatefulStore.d.ts +0 -205
- package/dist/storage/StatefulStore.d.ts.map +0 -1
- package/dist/storage/StatefulStore.js +0 -301
- package/dist/storage/StatefulStore.js.map +0 -1
- package/dist/storage/persistentStorage.d.ts +0 -12
- package/dist/storage/persistentStorage.d.ts.map +0 -1
- package/dist/storage/persistentStorage.js +0 -28
- package/dist/storage/persistentStorage.js.map +0 -1
- package/dist/storage/useLocalStorage.d.ts +0 -7
- package/dist/storage/useLocalStorage.d.ts.map +0 -1
- package/dist/storage/useLocalStorage.js +0 -40
- package/dist/storage/useLocalStorage.js.map +0 -1
- package/dist/string/alignment.d.ts +0 -25
- package/dist/string/alignment.d.ts.map +0 -1
- package/dist/string/alignment.js +0 -26
- package/dist/string/alignment.js.map +0 -1
- package/dist/string/ucfirst.d.ts +0 -4
- package/dist/string/ucfirst.d.ts.map +0 -1
- package/dist/string/ucfirst.js +0 -6
- package/dist/string/ucfirst.js.map +0 -1
- package/dist/typeGuards/toBoolean.d.ts +0 -26
- package/dist/typeGuards/toBoolean.d.ts.map +0 -1
- package/dist/typeGuards/toBoolean.js +0 -11
- package/dist/typeGuards/toBoolean.js.map +0 -1
- package/dist/types/apia/common.d.ts +0 -114
- package/dist/types/apia/common.d.ts.map +0 -1
- package/dist/types/apia/date.d.ts +0 -4
- package/dist/types/apia/date.d.ts.map +0 -1
- package/dist/types/apia/forms.d.ts +0 -221
- package/dist/types/apia/forms.d.ts.map +0 -1
- package/dist/types/misc.d.ts +0 -9
- package/dist/types/misc.d.ts.map +0 -1
- package/dist/xml/parseXmlAsync.d.ts +0 -4
- package/dist/xml/parseXmlAsync.d.ts.map +0 -1
- package/dist/xml/parseXmlAsync.js +0 -58
- package/dist/xml/parseXmlAsync.js.map +0 -1
|
@@ -1,86 +0,0 @@
|
|
|
1
|
-
import { HTMLAttributes } from 'react';
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* El hook useDomState permite aplicar propiedades a un
|
|
5
|
-
* elemento del DOM de la forma más eficiente posible.
|
|
6
|
-
*
|
|
7
|
-
* Este hook no permite el uso de sx ya que por las características
|
|
8
|
-
* del sx, el re-renderizado es necesario.
|
|
9
|
-
*
|
|
10
|
-
* @example
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* const TestComponent = () => {
|
|
14
|
-
const { domProps, setDomProps } = useDomState<BoxProps>({
|
|
15
|
-
style: {
|
|
16
|
-
position: 'fixed',
|
|
17
|
-
left: 0,
|
|
18
|
-
top: 0,
|
|
19
|
-
width: '150px',
|
|
20
|
-
height: '150px',
|
|
21
|
-
backgroundColor: '#ccc',
|
|
22
|
-
},
|
|
23
|
-
});
|
|
24
|
-
const initialPosition = React.useRef({ boxX: 0, boxY: 0, x: 0, y: 0 });
|
|
25
|
-
const isDragging = React.useRef(false);
|
|
26
|
-
const [state, setState] = React.useState(1);
|
|
27
|
-
|
|
28
|
-
React.useEffect(() => {
|
|
29
|
-
const move = (ev: MouseEvent) => {
|
|
30
|
-
if (isDragging.current) {
|
|
31
|
-
const moveX = ev.clientX - initialPosition.current.x;
|
|
32
|
-
const moveY = ev.clientY - initialPosition.current.y;
|
|
33
|
-
const newLeft = initialPosition.current.boxX + moveX;
|
|
34
|
-
const newTop = initialPosition.current.boxY + moveY;
|
|
35
|
-
setDomProps({
|
|
36
|
-
style: {
|
|
37
|
-
left: `${newLeft}px`,
|
|
38
|
-
top: `${newTop}px`,
|
|
39
|
-
},
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
};
|
|
43
|
-
|
|
44
|
-
const removeSuscription = () => {
|
|
45
|
-
isDragging.current = false;
|
|
46
|
-
};
|
|
47
|
-
|
|
48
|
-
document.addEventListener('mousemove', move);
|
|
49
|
-
document.addEventListener('mouseup', removeSuscription);
|
|
50
|
-
|
|
51
|
-
return () => {
|
|
52
|
-
document.removeEventListener('mousemove', move);
|
|
53
|
-
document.removeEventListener('mouseup', removeSuscription);
|
|
54
|
-
};
|
|
55
|
-
}, [setDomProps]);
|
|
56
|
-
|
|
57
|
-
return (
|
|
58
|
-
<Box
|
|
59
|
-
{...domProps}
|
|
60
|
-
onMouseDown={(ev) => {
|
|
61
|
-
initialPosition.current = {
|
|
62
|
-
boxX: Number.parseInt(domProps.style?.left as string, 10),
|
|
63
|
-
boxY: Number.parseInt(domProps.style?.top as string, 10),
|
|
64
|
-
x: ev.clientX,
|
|
65
|
-
y: ev.clientY,
|
|
66
|
-
};
|
|
67
|
-
isDragging.current = true;
|
|
68
|
-
}}
|
|
69
|
-
>
|
|
70
|
-
Esta caja es arrastrable. Renderizados: {state}
|
|
71
|
-
<Button onClick={() => setState((current) => current + 1)}>
|
|
72
|
-
Renderizar
|
|
73
|
-
</Button>
|
|
74
|
-
</Box>
|
|
75
|
-
);
|
|
76
|
-
};
|
|
77
|
-
*/
|
|
78
|
-
declare function useDomState<T extends HTMLAttributes<HTMLElement>>(initialDomProps?: T): {
|
|
79
|
-
domProps: T & {
|
|
80
|
-
ref: (el: HTMLElement) => void;
|
|
81
|
-
};
|
|
82
|
-
setDomProps: ({ style, ...newDomProps }: Partial<T>) => void;
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
export { useDomState };
|
|
86
|
-
//# sourceMappingURL=useDomState.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useDomState.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import React__default from 'react';
|
|
2
|
-
|
|
3
|
-
function assignProps(el, { style, ...props }) {
|
|
4
|
-
if (style) {
|
|
5
|
-
Object.entries(style).forEach(([name, value]) => {
|
|
6
|
-
el.style[name] = value;
|
|
7
|
-
});
|
|
8
|
-
}
|
|
9
|
-
Object.assign(el, props);
|
|
10
|
-
}
|
|
11
|
-
function useDomState(initialDomProps) {
|
|
12
|
-
const domProps = React__default.useRef({
|
|
13
|
-
...initialDomProps ?? {},
|
|
14
|
-
ref: React__default.useCallback((el) => {
|
|
15
|
-
ref.current = el;
|
|
16
|
-
assignProps(ref.current, domProps.current);
|
|
17
|
-
}, [])
|
|
18
|
-
});
|
|
19
|
-
const ref = React__default.useRef(null);
|
|
20
|
-
return {
|
|
21
|
-
domProps: domProps.current,
|
|
22
|
-
setDomProps: React__default.useCallback(({ style, ...newDomProps }) => {
|
|
23
|
-
if (style) {
|
|
24
|
-
const newStyles = { ...domProps.current.style, ...style };
|
|
25
|
-
domProps.current.style = newStyles;
|
|
26
|
-
}
|
|
27
|
-
Object.assign(domProps.current, newDomProps);
|
|
28
|
-
if (ref.current)
|
|
29
|
-
assignProps(ref.current, domProps.current);
|
|
30
|
-
}, [])
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export { useDomState };
|
|
35
|
-
//# sourceMappingURL=useDomState.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"useDomState.js","sources":["../../src/states/useDomState.tsx"],"sourcesContent":["import React, { HTMLAttributes, HTMLProps } from 'react';\r\n\r\nfunction assignProps<T extends HTMLProps<HTMLElement>>(\r\n el: HTMLElement,\r\n { style, ...props }: T,\r\n) {\r\n if (style) {\r\n Object.entries(style).forEach(([name, value]) => {\r\n // eslint-disable-next-line no-param-reassign, @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment\r\n (el as any).style[name] = value;\r\n });\r\n }\r\n Object.assign(el, props);\r\n}\r\n\r\n/**\r\n * El hook useDomState permite aplicar propiedades a un\r\n * elemento del DOM de la forma más eficiente posible.\r\n *\r\n * Este hook no permite el uso de sx ya que por las características\r\n * del sx, el re-renderizado es necesario.\r\n *\r\n * @example\r\n *\r\n *\r\n * const TestComponent = () => {\r\n const { domProps, setDomProps } = useDomState<BoxProps>({\r\n style: {\r\n position: 'fixed',\r\n left: 0,\r\n top: 0,\r\n width: '150px',\r\n height: '150px',\r\n backgroundColor: '#ccc',\r\n },\r\n });\r\n const initialPosition = React.useRef({ boxX: 0, boxY: 0, x: 0, y: 0 });\r\n const isDragging = React.useRef(false);\r\n const [state, setState] = React.useState(1);\r\n\r\n React.useEffect(() => {\r\n const move = (ev: MouseEvent) => {\r\n if (isDragging.current) {\r\n const moveX = ev.clientX - initialPosition.current.x;\r\n const moveY = ev.clientY - initialPosition.current.y;\r\n const newLeft = initialPosition.current.boxX + moveX;\r\n const newTop = initialPosition.current.boxY + moveY;\r\n setDomProps({\r\n style: {\r\n left: `${newLeft}px`,\r\n top: `${newTop}px`,\r\n },\r\n });\r\n }\r\n };\r\n\r\n const removeSuscription = () => {\r\n isDragging.current = false;\r\n };\r\n\r\n document.addEventListener('mousemove', move);\r\n document.addEventListener('mouseup', removeSuscription);\r\n\r\n return () => {\r\n document.removeEventListener('mousemove', move);\r\n document.removeEventListener('mouseup', removeSuscription);\r\n };\r\n }, [setDomProps]);\r\n\r\n return (\r\n <Box\r\n {...domProps}\r\n onMouseDown={(ev) => {\r\n initialPosition.current = {\r\n boxX: Number.parseInt(domProps.style?.left as string, 10),\r\n boxY: Number.parseInt(domProps.style?.top as string, 10),\r\n x: ev.clientX,\r\n y: ev.clientY,\r\n };\r\n isDragging.current = true;\r\n }}\r\n >\r\n Esta caja es arrastrable. Renderizados: {state}\r\n <Button onClick={() => setState((current) => current + 1)}>\r\n Renderizar\r\n </Button>\r\n </Box>\r\n );\r\n};\r\n */\r\nexport function useDomState<T extends HTMLAttributes<HTMLElement>>(\r\n initialDomProps?: T,\r\n) {\r\n const domProps = React.useRef<T & { ref: (el: HTMLElement) => void }>({\r\n ...(initialDomProps ?? ({} as T)),\r\n ref: React.useCallback((el: HTMLElement) => {\r\n ref.current = el;\r\n assignProps(ref.current, domProps.current);\r\n }, []),\r\n });\r\n const ref = React.useRef<HTMLElement | null>(null);\r\n return {\r\n domProps: domProps.current,\r\n setDomProps: React.useCallback(({ style, ...newDomProps }: Partial<T>) => {\r\n if (style) {\r\n const newStyles = { ...domProps.current.style, ...style };\r\n domProps.current.style = newStyles;\r\n }\r\n Object.assign(domProps.current, newDomProps);\r\n if (ref.current) assignProps(ref.current, domProps.current);\r\n }, []),\r\n };\r\n}\r\n"],"names":["React"],"mappings":";;AAEA,SAAS,YACP,EACA,EAAA,EAAE,KAAO,EAAA,GAAG,OACZ,EAAA;AACA,EAAA,IAAI,KAAO,EAAA;AACT,IAAO,MAAA,CAAA,OAAA,CAAQ,KAAK,CAAE,CAAA,OAAA,CAAQ,CAAC,CAAC,IAAA,EAAM,KAAK,CAAM,KAAA;AAE/C,MAAC,EAAA,CAAW,KAAM,CAAA,IAAI,CAAI,GAAA,KAAA,CAAA;AAAA,KAC3B,CAAA,CAAA;AAAA,GACH;AACA,EAAO,MAAA,CAAA,MAAA,CAAO,IAAI,KAAK,CAAA,CAAA;AACzB,CAAA;AA6EO,SAAS,YACd,eACA,EAAA;AACA,EAAM,MAAA,QAAA,GAAWA,eAAM,MAA+C,CAAA;AAAA,IACpE,GAAI,mBAAoB,EAAC;AAAA,IACzB,GAAK,EAAAA,cAAA,CAAM,WAAY,CAAA,CAAC,EAAoB,KAAA;AAC1C,MAAA,GAAA,CAAI,OAAU,GAAA,EAAA,CAAA;AACd,MAAY,WAAA,CAAA,GAAA,CAAI,OAAS,EAAA,QAAA,CAAS,OAAO,CAAA,CAAA;AAAA,KAC3C,EAAG,EAAE,CAAA;AAAA,GACN,CAAA,CAAA;AACD,EAAM,MAAA,GAAA,GAAMA,cAAM,CAAA,MAAA,CAA2B,IAAI,CAAA,CAAA;AACjD,EAAO,OAAA;AAAA,IACL,UAAU,QAAS,CAAA,OAAA;AAAA,IACnB,WAAA,EAAaA,eAAM,WAAY,CAAA,CAAC,EAAE,KAAO,EAAA,GAAG,aAA8B,KAAA;AACxE,MAAA,IAAI,KAAO,EAAA;AACT,QAAA,MAAM,YAAY,EAAE,GAAG,SAAS,OAAQ,CAAA,KAAA,EAAO,GAAG,KAAM,EAAA,CAAA;AACxD,QAAA,QAAA,CAAS,QAAQ,KAAQ,GAAA,SAAA,CAAA;AAAA,OAC3B;AACA,MAAO,MAAA,CAAA,MAAA,CAAO,QAAS,CAAA,OAAA,EAAS,WAAW,CAAA,CAAA;AAC3C,MAAA,IAAI,GAAI,CAAA,OAAA;AAAS,QAAY,WAAA,CAAA,GAAA,CAAI,OAAS,EAAA,QAAA,CAAS,OAAO,CAAA,CAAA;AAAA,KAC5D,EAAG,EAAE,CAAA;AAAA,GACP,CAAA;AACF;;;;"}
|
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
import { TId } from '../types/misc.js';
|
|
2
|
-
|
|
3
|
-
type StatefulStoreUnsuscriber = () => void;
|
|
4
|
-
type StatefulStoreUpdater<Props> = (currentProps: Props) => Props;
|
|
5
|
-
type StatefulStoreUpdateProps<Props> = StatefulStoreUpdater<Props> | Partial<Props>;
|
|
6
|
-
/**
|
|
7
|
-
* Clase facilitadora del uso de StatefulStore. Es un pequeño almacen que
|
|
8
|
-
* permite actualizar sus propiedades y sabe cómo sincronizarse con el store de
|
|
9
|
-
* modo que los cambios se propaguen según corresponda.
|
|
10
|
-
*/
|
|
11
|
-
declare abstract class BasicStoredElement<Props extends Record<string, unknown>> {
|
|
12
|
-
#private;
|
|
13
|
-
abstract getId(): TId;
|
|
14
|
-
onUpdate(cb: () => void): StatefulStoreUnsuscriber;
|
|
15
|
-
props: Props;
|
|
16
|
-
constructor(props: Props);
|
|
17
|
-
protected shoutUpdates: () => void;
|
|
18
|
-
update(newProps: StatefulStoreUpdateProps<Props>): void;
|
|
19
|
-
useProps: () => Props;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Son las acciones de adición del store.
|
|
23
|
-
*/
|
|
24
|
-
type AddActions<T extends Record<string, BasicStoredElement<any>>> = {
|
|
25
|
-
[P in keyof T as `add${Capitalize<string & P>}`]: (el: T[P]) => void;
|
|
26
|
-
};
|
|
27
|
-
/**
|
|
28
|
-
* Acciones de vaciado del store.
|
|
29
|
-
*/
|
|
30
|
-
type EmptyActions<T extends Record<string, BasicStoredElement<any>>> = {
|
|
31
|
-
[P in keyof T as `empty${Capitalize<string & P>}`]: () => void;
|
|
32
|
-
};
|
|
33
|
-
/**
|
|
34
|
-
* Acciones de removido del store.
|
|
35
|
-
*/
|
|
36
|
-
type RemoveActions<T extends Record<string, BasicStoredElement<any>>> = {
|
|
37
|
-
[P in keyof T as `remove${Capitalize<string & P>}`]: (id: TId) => void;
|
|
38
|
-
};
|
|
39
|
-
type UpdateListActions<T extends Record<string, BasicStoredElement<any>>> = {
|
|
40
|
-
[P in keyof T as `update${Capitalize<string & P>}List`]: (newList: T[P]) => void;
|
|
41
|
-
};
|
|
42
|
-
/**
|
|
43
|
-
* Conjunto de acciones disponibles del store
|
|
44
|
-
*/
|
|
45
|
-
type ActionMethods<T extends Record<string, BasicStoredElement<any>>> = {
|
|
46
|
-
actions: AddActions<T> & EmptyActions<T> & RemoveActions<T> & UpdateListActions<T>;
|
|
47
|
-
};
|
|
48
|
-
/**
|
|
49
|
-
* Método que permite obtener el listado de elementos de un tipo.
|
|
50
|
-
*/
|
|
51
|
-
type GetStateActions<T extends Record<string, BasicStoredElement<any>>> = {
|
|
52
|
-
[P in keyof T as `get${Capitalize<string & P>}State`]: () => T[P][];
|
|
53
|
-
};
|
|
54
|
-
/**
|
|
55
|
-
* Método que permite conocer las propiedades de un elemento.
|
|
56
|
-
*/
|
|
57
|
-
type GetItemActions<T extends Record<string, BasicStoredElement<any>>> = {
|
|
58
|
-
[P in keyof T as `get${Capitalize<string & P>}`]: (id: TId) => T[P];
|
|
59
|
-
};
|
|
60
|
-
type UpdateItemActions<T extends Record<string, BasicStoredElement<any>>> = {
|
|
61
|
-
[P in keyof T as `update${Capitalize<string & P>}`]: (id: TId, newProps: StatefulStoreUpdateProps<T[P]['props']>) => void;
|
|
62
|
-
};
|
|
63
|
-
/**
|
|
64
|
-
* Conjunto de métodos que permiten acceder al estado en un momento
|
|
65
|
-
* determinado.
|
|
66
|
-
*/
|
|
67
|
-
type StateMethods<T extends Record<string, BasicStoredElement<any>>> = {
|
|
68
|
-
state: GetStateActions<T> & GetItemActions<T> & UpdateItemActions<T>;
|
|
69
|
-
};
|
|
70
|
-
/**
|
|
71
|
-
* Es el hook encargado de permitir la escucha de listado de elementos y sus
|
|
72
|
-
* propiedades.
|
|
73
|
-
*/
|
|
74
|
-
type HookUseState<T extends Record<string, BasicStoredElement<any>>> = {
|
|
75
|
-
[P in keyof T as `use${Capitalize<string & P>}`]: () => T[P][];
|
|
76
|
-
};
|
|
77
|
-
/**
|
|
78
|
-
* Es el hook encargado de permitir la escucha de listado de elementos
|
|
79
|
-
*/
|
|
80
|
-
type HookUseList<T extends Record<string, BasicStoredElement<any>>> = {
|
|
81
|
-
[P in keyof T as `use${Capitalize<string & P>}List`]: () => T[P][];
|
|
82
|
-
};
|
|
83
|
-
/**
|
|
84
|
-
* Es el hook encargado de permitir la escucha de propiedades de un elemento
|
|
85
|
-
*/
|
|
86
|
-
type HookUseStateById<T extends Record<string, BasicStoredElement<any>>> = {
|
|
87
|
-
[P in keyof T as `use${Capitalize<string & P>}ById`]: (id: TId) => T[P] | undefined;
|
|
88
|
-
};
|
|
89
|
-
/**
|
|
90
|
-
* Conjunto de hooks del store.
|
|
91
|
-
*/
|
|
92
|
-
type HooksMethods<T extends Record<string, BasicStoredElement<any>>> = {
|
|
93
|
-
hooks: HookUseState<T> & HookUseStateById<T> & HookUseList<T>;
|
|
94
|
-
};
|
|
95
|
-
/**
|
|
96
|
-
* Es la suscripción encargada de permitir la escucha de propiedades de un
|
|
97
|
-
* elemento
|
|
98
|
-
*/
|
|
99
|
-
type SuscribeById<T extends Record<string, BasicStoredElement<any>>> = {
|
|
100
|
-
[P in keyof T as `change${Capitalize<string & P>}Element`]: (id: TId, cb: (props: T[P]) => unknown) => StatefulStoreUnsuscriber;
|
|
101
|
-
};
|
|
102
|
-
/**
|
|
103
|
-
* Es la suscripción encaragada de permitir la escucha de cambios en la lista y
|
|
104
|
-
* las propiedades de sus elementos.
|
|
105
|
-
*/
|
|
106
|
-
type SuscribeToListChange<T extends Record<string, BasicStoredElement<any>>> = {
|
|
107
|
-
[P in keyof T as `change${Capitalize<string & P>}`]: (cb: (props: T[P][]) => unknown) => StatefulStoreUnsuscriber;
|
|
108
|
-
};
|
|
109
|
-
/**
|
|
110
|
-
* Es la suscripción encaragada de permitir la escucha de cambios en la
|
|
111
|
-
* cantidad de elementos de la lista, pero no en las propiedades de los
|
|
112
|
-
* elementos.
|
|
113
|
-
*/
|
|
114
|
-
type SuscribeToListCountChange<T extends Record<string, BasicStoredElement<any>>> = {
|
|
115
|
-
[P in keyof T as `change${Capitalize<string & P>}Ammount`]: (cb: (props: T[P][]) => unknown) => StatefulStoreUnsuscriber;
|
|
116
|
-
};
|
|
117
|
-
type SuscribeMethods<T extends Record<string, BasicStoredElement<any>>> = {
|
|
118
|
-
on: SuscribeById<T> & SuscribeToListChange<T> & SuscribeToListCountChange<T>;
|
|
119
|
-
};
|
|
120
|
-
type InitialStates<T extends Record<string, BasicStoredElement<any>>> = {
|
|
121
|
-
[P in keyof T as `${string & P}State`]: T[P][];
|
|
122
|
-
};
|
|
123
|
-
/**
|
|
124
|
-
* Este store permite mantener `N` listados de objetos y por cada tipo de
|
|
125
|
-
* objeto ofrece métodos para agregar, eliminar, obtener uno, obtener todos y
|
|
126
|
-
* un hook para conocer el listado en tiempo real.
|
|
127
|
-
*
|
|
128
|
-
* **Métodos disponibles**
|
|
129
|
-
*
|
|
130
|
-
* - **action.addXXX**: Agrega un elemento de tipo XXX a la lista.
|
|
131
|
-
* - **action.emptyXXX**: Vacía el listado de tipo XXX.
|
|
132
|
-
* - **action.removeXXX**: Elimina un elemento de tipo XXX de la lista.
|
|
133
|
-
* - **action.updateXXXList**: Permite actualizar toda la lista en una sola
|
|
134
|
-
* acción. - **hooks.useXXX**: Permite conocer el listado de elementos y el
|
|
135
|
-
* cambio
|
|
136
|
-
* en sus propiedades en tiempo real.
|
|
137
|
-
* - **hooks.useXXXById**: Permite conocer los cambios a un elemento de la
|
|
138
|
-
* lista en tiempo real.
|
|
139
|
-
* - **hooks.useXXXList**: Permite conocer el listado de
|
|
140
|
-
* elementos pero no reacciona a los cambios en las propiedades de los
|
|
141
|
-
* elementos.
|
|
142
|
-
* - **on.changeXXX**: Permite suscribirse al listado de elementos y
|
|
143
|
-
* cambios en sus propiedades.
|
|
144
|
-
* - **on.changeXXXAmmount**: Permite suscribirse
|
|
145
|
-
* al listado de elementos, sin tomar en cuenta el cambio en las propiedades
|
|
146
|
-
* de sus items.
|
|
147
|
-
* - **on.changeXXXElement**: Permite suscribirse al cambio de
|
|
148
|
-
* propiedades de un ítem particular
|
|
149
|
-
* - **state.getXXX**: Permite obtener el
|
|
150
|
-
* esatdo de un elemento particular de la lista.
|
|
151
|
-
* - **state.getXXXState**:
|
|
152
|
-
* Permite obtener el estado del listado completo de un tipo de elementos.
|
|
153
|
-
* - **state.updateXXX**: Es un atajo para state.getXXX(id).update
|
|
154
|
-
*
|
|
155
|
-
* La funcionalidad de actualización se implementa en el objeto almacenado y es
|
|
156
|
-
* comunicada en forma automática al store, de forma que el store no conoce
|
|
157
|
-
* solamente cuántos y cuáles elementos hay almacenados, sino que además refleja
|
|
158
|
-
* en tiempo real el estado de sus propiedades.
|
|
159
|
-
*
|
|
160
|
-
* @example
|
|
161
|
-
*
|
|
162
|
-
type TPeople = { name: string };
|
|
163
|
-
class People extends BasicStoredElement<TPeople> {
|
|
164
|
-
getId(): TId {
|
|
165
|
-
return this.props.name;
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
class Schedule extends BasicStoredElement<{ day: string; task: string }>
|
|
170
|
-
{
|
|
171
|
-
getId() {
|
|
172
|
-
return this.props.day;
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
|
|
176
|
-
const r = makeStatefulStore(
|
|
177
|
-
{
|
|
178
|
-
people: People.prototype,
|
|
179
|
-
schedules: Schedule.prototype,
|
|
180
|
-
},
|
|
181
|
-
{
|
|
182
|
-
peopleState: [new People({ name: 'A' }), new People({ name: 'B' })],
|
|
183
|
-
},
|
|
184
|
-
);
|
|
185
|
-
|
|
186
|
-
const p = r.hooks.usePeople();
|
|
187
|
-
p[0].props.name;
|
|
188
|
-
|
|
189
|
-
r.hooks.usePeople();
|
|
190
|
-
|
|
191
|
-
r.actions.removePeople('asdf');
|
|
192
|
-
|
|
193
|
-
r.actions.addPeople(new People({ name: 'asdf' }));
|
|
194
|
-
r.actions.removePeople('asdf');
|
|
195
|
-
|
|
196
|
-
r.state.getPeopleState();
|
|
197
|
-
const pep = r.state.getPeople('asdf')
|
|
198
|
-
|
|
199
|
-
const ph = r.hooks.usePeople();
|
|
200
|
-
const sch = r.hooks.useSchedules();
|
|
201
|
-
*/
|
|
202
|
-
declare function makeStatefulStore<T extends Record<string, BasicStoredElement<any>>>(entries: T, initialStates?: Partial<InitialStates<T>>): ActionMethods<T> & HooksMethods<T> & StateMethods<T> & SuscribeMethods<T>;
|
|
203
|
-
|
|
204
|
-
export { BasicStoredElement, type StatefulStoreUpdateProps, type StatefulStoreUpdater, makeStatefulStore };
|
|
205
|
-
//# sourceMappingURL=StatefulStore.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StatefulStore.d.ts","sources":[],"sourcesContent":[],"names":[],"mappings":""}
|
|
@@ -1,301 +0,0 @@
|
|
|
1
|
-
import { useState } from 'react';
|
|
2
|
-
import { useMount } from '../hooks/useMount.js';
|
|
3
|
-
|
|
4
|
-
var __accessCheck = (obj, member, msg) => {
|
|
5
|
-
if (!member.has(obj))
|
|
6
|
-
throw TypeError("Cannot " + msg);
|
|
7
|
-
};
|
|
8
|
-
var __privateGet = (obj, member, getter) => {
|
|
9
|
-
__accessCheck(obj, member, "read from private field");
|
|
10
|
-
return getter ? getter.call(obj) : member.get(obj);
|
|
11
|
-
};
|
|
12
|
-
var __privateAdd = (obj, member, value) => {
|
|
13
|
-
if (member.has(obj))
|
|
14
|
-
throw TypeError("Cannot add the same private member more than once");
|
|
15
|
-
member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
|
|
16
|
-
};
|
|
17
|
-
var __privateSet = (obj, member, value, setter) => {
|
|
18
|
-
__accessCheck(obj, member, "write to private field");
|
|
19
|
-
setter ? setter.call(obj, value) : member.set(obj, value);
|
|
20
|
-
return value;
|
|
21
|
-
};
|
|
22
|
-
var _onUpdateCbs;
|
|
23
|
-
function upper(s) {
|
|
24
|
-
return `${s.charAt(0).toUpperCase()}${s.slice(1)}`;
|
|
25
|
-
}
|
|
26
|
-
function isUpdater(props) {
|
|
27
|
-
return typeof props === "function";
|
|
28
|
-
}
|
|
29
|
-
class BasicStoredElement {
|
|
30
|
-
constructor(props) {
|
|
31
|
-
__privateAdd(this, _onUpdateCbs, []);
|
|
32
|
-
this.props = {};
|
|
33
|
-
this.shoutUpdates = () => {
|
|
34
|
-
__privateGet(this, _onUpdateCbs).forEach((current) => current());
|
|
35
|
-
};
|
|
36
|
-
this.useProps = () => {
|
|
37
|
-
const [props, setState] = useState(this.props);
|
|
38
|
-
useMount(() => {
|
|
39
|
-
setState({ ...this.props });
|
|
40
|
-
return this.onUpdate(() => {
|
|
41
|
-
setState({ ...this.props });
|
|
42
|
-
});
|
|
43
|
-
});
|
|
44
|
-
return props;
|
|
45
|
-
};
|
|
46
|
-
this.props = props;
|
|
47
|
-
}
|
|
48
|
-
onUpdate(cb) {
|
|
49
|
-
__privateGet(this, _onUpdateCbs).push(cb);
|
|
50
|
-
return () => {
|
|
51
|
-
__privateSet(this, _onUpdateCbs, __privateGet(this, _onUpdateCbs).filter((current) => current !== cb));
|
|
52
|
-
};
|
|
53
|
-
}
|
|
54
|
-
update(newProps) {
|
|
55
|
-
const actualNewProps = isUpdater(newProps) ? newProps(this.props) : newProps;
|
|
56
|
-
this.props = { ...this.props, ...actualNewProps };
|
|
57
|
-
this.shoutUpdates();
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
_onUpdateCbs = new WeakMap();
|
|
61
|
-
class People extends BasicStoredElement {
|
|
62
|
-
getId() {
|
|
63
|
-
return this.props.name;
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
makeStatefulStore({
|
|
67
|
-
people: People.prototype
|
|
68
|
-
});
|
|
69
|
-
function makeStatefulStore(entries, initialStates) {
|
|
70
|
-
const hookUseState = {};
|
|
71
|
-
const hookUseList = {};
|
|
72
|
-
const hookUseStateById = {};
|
|
73
|
-
const suscribeById = {};
|
|
74
|
-
const suscribeToList = {};
|
|
75
|
-
const suscribeToListCount = {};
|
|
76
|
-
const addActions = {};
|
|
77
|
-
const emptyActions = {};
|
|
78
|
-
const removeActions = {};
|
|
79
|
-
const updateListActions = {};
|
|
80
|
-
const getItemActions = {};
|
|
81
|
-
const getStateActions = {};
|
|
82
|
-
const updateItemActions = {};
|
|
83
|
-
Object.keys(entries).forEach((name) => {
|
|
84
|
-
const initialStateKey = `${upper(name)}State`;
|
|
85
|
-
let store = {};
|
|
86
|
-
const initialState = initialStates?.[initialStateKey];
|
|
87
|
-
initialState?.forEach((current) => {
|
|
88
|
-
store[current.getId()] = current;
|
|
89
|
-
});
|
|
90
|
-
let listStateChangeHandlers = [];
|
|
91
|
-
function shoutListStateChange() {
|
|
92
|
-
listStateChangeHandlers.forEach((current) => current());
|
|
93
|
-
}
|
|
94
|
-
const elementChangeHandlers = {};
|
|
95
|
-
function shoutListElementChange(id) {
|
|
96
|
-
elementChangeHandlers[id]?.forEach((current) => current());
|
|
97
|
-
}
|
|
98
|
-
let listCountChangeHandlers = [];
|
|
99
|
-
function shoutListCountChange() {
|
|
100
|
-
listCountChangeHandlers.forEach((current) => current());
|
|
101
|
-
}
|
|
102
|
-
const onUpdateElementSuscriptions = {};
|
|
103
|
-
const addKey = `add${upper(name)}`;
|
|
104
|
-
addActions[addKey] = (newElement) => {
|
|
105
|
-
let elId = newElement.getId();
|
|
106
|
-
let lastProps = { ...newElement.props };
|
|
107
|
-
store[elId] = newElement;
|
|
108
|
-
const suscription = newElement.onUpdate(() => {
|
|
109
|
-
const id = newElement.getId();
|
|
110
|
-
if (id !== elId) {
|
|
111
|
-
if (store[id]) {
|
|
112
|
-
newElement.update(lastProps);
|
|
113
|
-
throw new Error(
|
|
114
|
-
`Cannot set new id ${id} because it already exists`
|
|
115
|
-
);
|
|
116
|
-
}
|
|
117
|
-
delete store[elId];
|
|
118
|
-
store[id] = newElement;
|
|
119
|
-
elId = id;
|
|
120
|
-
lastProps = newElement.props;
|
|
121
|
-
}
|
|
122
|
-
shoutListElementChange(id);
|
|
123
|
-
shoutListStateChange();
|
|
124
|
-
});
|
|
125
|
-
onUpdateElementSuscriptions[newElement.getId()] = suscription;
|
|
126
|
-
shoutListStateChange();
|
|
127
|
-
shoutListCountChange();
|
|
128
|
-
shoutListElementChange(elId);
|
|
129
|
-
};
|
|
130
|
-
const emptyKey = `empty${upper(name)}`;
|
|
131
|
-
emptyActions[emptyKey] = () => {
|
|
132
|
-
Object.values(onUpdateElementSuscriptions).forEach(
|
|
133
|
-
(current) => current()
|
|
134
|
-
);
|
|
135
|
-
store = {};
|
|
136
|
-
shoutListCountChange();
|
|
137
|
-
shoutListStateChange();
|
|
138
|
-
Object.keys(elementChangeHandlers).forEach(
|
|
139
|
-
(current) => shoutListElementChange(current)
|
|
140
|
-
);
|
|
141
|
-
};
|
|
142
|
-
const removeKey = `remove${upper(name)}`;
|
|
143
|
-
removeActions[removeKey] = (id) => {
|
|
144
|
-
onUpdateElementSuscriptions[id]?.();
|
|
145
|
-
delete store[id];
|
|
146
|
-
shoutListCountChange();
|
|
147
|
-
shoutListStateChange();
|
|
148
|
-
shoutListElementChange(id);
|
|
149
|
-
};
|
|
150
|
-
const updateListKey = `update${upper(
|
|
151
|
-
name
|
|
152
|
-
)}List`;
|
|
153
|
-
updateListActions[updateListKey] = (list) => {
|
|
154
|
-
store[name] = list;
|
|
155
|
-
shoutListCountChange();
|
|
156
|
-
shoutListStateChange();
|
|
157
|
-
};
|
|
158
|
-
const getStateKey = `get${upper(name)}State`;
|
|
159
|
-
getStateActions[getStateKey] = () => {
|
|
160
|
-
return Object.values(store);
|
|
161
|
-
};
|
|
162
|
-
const getState = getStateActions[getStateKey];
|
|
163
|
-
const getItemKey = `get${upper(name)}`;
|
|
164
|
-
getItemActions[getItemKey] = (id) => {
|
|
165
|
-
return store[id];
|
|
166
|
-
};
|
|
167
|
-
const updateItemKey = `update${upper(name)}`;
|
|
168
|
-
updateItemActions[updateItemKey] = (id, newProps) => {
|
|
169
|
-
store[id].update(newProps);
|
|
170
|
-
};
|
|
171
|
-
const hookUseStateKey = `use${upper(name)}`;
|
|
172
|
-
hookUseState[hookUseStateKey] = () => {
|
|
173
|
-
const [state2, setState] = useState(getState());
|
|
174
|
-
useMount(() => {
|
|
175
|
-
setState(getState());
|
|
176
|
-
const eventHandler = () => {
|
|
177
|
-
setState(getState());
|
|
178
|
-
};
|
|
179
|
-
listStateChangeHandlers.push(eventHandler);
|
|
180
|
-
return () => {
|
|
181
|
-
listStateChangeHandlers = listStateChangeHandlers.filter(
|
|
182
|
-
(current) => current !== eventHandler
|
|
183
|
-
);
|
|
184
|
-
};
|
|
185
|
-
});
|
|
186
|
-
return state2;
|
|
187
|
-
};
|
|
188
|
-
const hookUseListKey = `use${upper(name)}List`;
|
|
189
|
-
hookUseList[hookUseListKey] = () => {
|
|
190
|
-
const [state2, setState] = useState(getState());
|
|
191
|
-
useMount(() => {
|
|
192
|
-
setState(getState());
|
|
193
|
-
const eventHandler = () => {
|
|
194
|
-
setState(getState());
|
|
195
|
-
};
|
|
196
|
-
listCountChangeHandlers.push(eventHandler);
|
|
197
|
-
return () => {
|
|
198
|
-
listCountChangeHandlers = listCountChangeHandlers.filter(
|
|
199
|
-
(current) => current !== eventHandler
|
|
200
|
-
);
|
|
201
|
-
};
|
|
202
|
-
});
|
|
203
|
-
return state2;
|
|
204
|
-
};
|
|
205
|
-
const hookUseStateByIdKey = `use${upper(
|
|
206
|
-
name
|
|
207
|
-
)}ById`;
|
|
208
|
-
hookUseStateById[hookUseStateByIdKey] = (id) => {
|
|
209
|
-
const [state2, setState] = useState({ obj: store[id] });
|
|
210
|
-
useMount(() => {
|
|
211
|
-
setState({ obj: store[id] });
|
|
212
|
-
const eventHandler = () => {
|
|
213
|
-
setState({ obj: store[id] });
|
|
214
|
-
};
|
|
215
|
-
if (!elementChangeHandlers[id])
|
|
216
|
-
elementChangeHandlers[id] = [];
|
|
217
|
-
elementChangeHandlers[id].push(eventHandler);
|
|
218
|
-
return () => {
|
|
219
|
-
elementChangeHandlers[id] = elementChangeHandlers[id].filter(
|
|
220
|
-
(current) => current !== eventHandler
|
|
221
|
-
);
|
|
222
|
-
};
|
|
223
|
-
});
|
|
224
|
-
return state2.obj;
|
|
225
|
-
};
|
|
226
|
-
const onChangeElementKey = `change${upper(
|
|
227
|
-
name
|
|
228
|
-
)}Element`;
|
|
229
|
-
suscribeById[onChangeElementKey] = (id, cb) => {
|
|
230
|
-
if (!elementChangeHandlers[id])
|
|
231
|
-
elementChangeHandlers[id] = [];
|
|
232
|
-
const innerCb = () => {
|
|
233
|
-
cb(store[id]);
|
|
234
|
-
};
|
|
235
|
-
elementChangeHandlers[id].push(innerCb);
|
|
236
|
-
return () => {
|
|
237
|
-
elementChangeHandlers[id] = elementChangeHandlers[id].filter(
|
|
238
|
-
(current) => current !== innerCb
|
|
239
|
-
);
|
|
240
|
-
};
|
|
241
|
-
};
|
|
242
|
-
const onChangeListKey = `change${upper(
|
|
243
|
-
name
|
|
244
|
-
)}`;
|
|
245
|
-
suscribeToList[onChangeListKey] = (cb) => {
|
|
246
|
-
const innerCb = () => {
|
|
247
|
-
cb(getState());
|
|
248
|
-
};
|
|
249
|
-
listStateChangeHandlers.push(innerCb);
|
|
250
|
-
return () => {
|
|
251
|
-
listStateChangeHandlers = listStateChangeHandlers.filter(
|
|
252
|
-
(current) => current !== innerCb
|
|
253
|
-
);
|
|
254
|
-
};
|
|
255
|
-
};
|
|
256
|
-
const onChangeListCountKey = `change${upper(
|
|
257
|
-
name
|
|
258
|
-
)}Ammount`;
|
|
259
|
-
suscribeToListCount[onChangeListCountKey] = (cb) => {
|
|
260
|
-
const innerCb = () => {
|
|
261
|
-
cb(getState());
|
|
262
|
-
};
|
|
263
|
-
listCountChangeHandlers.push(innerCb);
|
|
264
|
-
return () => {
|
|
265
|
-
listCountChangeHandlers = listCountChangeHandlers.filter(
|
|
266
|
-
(current) => current !== innerCb
|
|
267
|
-
);
|
|
268
|
-
};
|
|
269
|
-
};
|
|
270
|
-
});
|
|
271
|
-
const actions = Object.assign(
|
|
272
|
-
{},
|
|
273
|
-
addActions,
|
|
274
|
-
removeActions,
|
|
275
|
-
emptyActions,
|
|
276
|
-
updateListActions
|
|
277
|
-
);
|
|
278
|
-
const hooks = Object.assign({}, hookUseState, hookUseStateById, hookUseList);
|
|
279
|
-
const on = Object.assign(
|
|
280
|
-
{},
|
|
281
|
-
suscribeById,
|
|
282
|
-
suscribeToList,
|
|
283
|
-
suscribeToListCount
|
|
284
|
-
);
|
|
285
|
-
const state = Object.assign(
|
|
286
|
-
{},
|
|
287
|
-
getStateActions,
|
|
288
|
-
getItemActions,
|
|
289
|
-
updateItemActions
|
|
290
|
-
);
|
|
291
|
-
return Object.assign(
|
|
292
|
-
{},
|
|
293
|
-
{ hooks },
|
|
294
|
-
{ actions },
|
|
295
|
-
{ state },
|
|
296
|
-
{ on }
|
|
297
|
-
);
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
export { BasicStoredElement, makeStatefulStore };
|
|
301
|
-
//# sourceMappingURL=StatefulStore.js.map
|