react-store-input 0.1.4 → 0.1.6

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.
@@ -3,7 +3,7 @@ import "react";
3
3
  import { format } from "date-fns";
4
4
 
5
5
  // src/use_store_controller.tsx
6
- import { useEffect as useEffect2, useId, useRef } from "react";
6
+ import { useId, useImperativeHandle, useRef } from "react";
7
7
 
8
8
  // src/use_subscribe.tsx
9
9
  import { useEffect } from "react";
@@ -19,18 +19,8 @@ function useSubscribe(store, subscriber) {
19
19
  // src/use_store_controller.tsx
20
20
  function useStoreController(store, props) {
21
21
  const ref = useRef(null);
22
+ useImperativeHandle(props.ref, () => ref.current, []);
22
23
  const dispatchKey = useId();
23
- useEffect2(() => {
24
- const element = ref.current;
25
- if (!element) {
26
- return;
27
- }
28
- if (typeof props.ref === "function") {
29
- props.ref(element);
30
- } else if (props.ref) {
31
- props.ref.current = element;
32
- }
33
- }, []);
34
24
  useSubscribe(store, (state, key) => {
35
25
  if (key === dispatchKey) {
36
26
  return;
@@ -38,7 +28,7 @@ function useStoreController(store, props) {
38
28
  if (!ref.current) return;
39
29
  props.onSubscribe(state, ref.current);
40
30
  });
41
- const onChange = () => {
31
+ const dispatch = () => {
42
32
  store.dispatch(
43
33
  (state) => {
44
34
  const element = ref.current;
@@ -52,26 +42,24 @@ function useStoreController(store, props) {
52
42
  };
53
43
  return {
54
44
  ref,
55
- onChange
45
+ dispatch
56
46
  };
57
47
  }
58
48
 
59
49
  // src/use_store_input.tsx
60
50
  function useStoreInput(store, props) {
61
- const toInputValue = (value) => {
51
+ const toInputValue = props.toInputValue || ((value) => {
62
52
  if (value === void 0 || value === null) {
63
53
  return "";
64
54
  }
65
55
  if (props.type === "datetime-local") {
66
- if (value instanceof Date) {
67
- return format(value, "yyyy-MM-dd'T'HH:mm:ss");
68
- }
69
- if (typeof value === "string") {
70
- return toInputValue(new Date(value));
56
+ const date = new Date(value);
57
+ if (!isNaN(date.getTime())) {
58
+ return format(date, "yyyy-MM-dd'T'HH:mm:ss");
71
59
  }
72
60
  }
73
61
  return String(value);
74
- };
62
+ });
75
63
  const getDefaultValue = () => {
76
64
  if (props.defaultValue !== void 0) {
77
65
  return props.defaultValue;
@@ -96,16 +84,15 @@ function useStoreInput(store, props) {
96
84
  }
97
85
  return toInputChecked(props.getter(store.state));
98
86
  };
99
- function toStateValue(value) {
100
- const selected = props.getter(store.state);
101
- if (typeof selected === "number") {
87
+ const toStateValue = props.toStateValue || ((value) => {
88
+ if (props.type === "number" || props.type === "range") {
102
89
  return Number(value);
103
90
  }
104
- if (selected instanceof Date) {
91
+ if (props.type === "datetime-local") {
105
92
  return new Date(value);
106
93
  }
107
94
  return value;
108
- }
95
+ });
109
96
  const inputProps = useStoreController(store, {
110
97
  ref: props.ref,
111
98
  onSubscribe: (state, element) => {
@@ -138,7 +125,7 @@ function useStoreInput(store, props) {
138
125
  defaultValue: getDefaultValue(),
139
126
  defaultChecked: getDefaultChecked(),
140
127
  onChange: (event) => {
141
- inputProps.onChange();
128
+ inputProps.dispatch();
142
129
  props.onChange?.(event);
143
130
  }
144
131
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-store-input",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "types": "./dist/index.d.ts",
5
5
  "main": "./dist/index.mjs",
6
6
  "module": "./dist/index.js",
@@ -1,4 +0,0 @@
1
- declare function serialize(value: unknown): unknown;
2
- declare function deserialize(data: unknown): unknown;
3
-
4
- export { deserialize, serialize };
@@ -1,4 +0,0 @@
1
- declare function serialize(value: unknown): unknown;
2
- declare function deserialize(data: unknown): unknown;
3
-
4
- export { deserialize, serialize };
package/dist/serialize.js DELETED
@@ -1,116 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
-
20
- // src/serialize.ts
21
- var serialize_exports = {};
22
- __export(serialize_exports, {
23
- deserialize: () => deserialize,
24
- serialize: () => serialize
25
- });
26
- module.exports = __toCommonJS(serialize_exports);
27
- function serialize(value) {
28
- if (value === void 0) {
29
- return void 0;
30
- }
31
- if (value === null) {
32
- return {
33
- type: "null",
34
- value: null
35
- };
36
- }
37
- if (typeof value === "string") {
38
- return {
39
- type: "string",
40
- value
41
- };
42
- }
43
- if (typeof value === "number") {
44
- return {
45
- type: "number",
46
- value
47
- };
48
- }
49
- if (typeof value === "boolean") {
50
- return {
51
- type: "boolean",
52
- value
53
- };
54
- }
55
- if (value instanceof Date) {
56
- return {
57
- type: "date",
58
- value: value.toISOString()
59
- };
60
- }
61
- if (Array.isArray(value)) {
62
- return {
63
- type: "array",
64
- value: value.map((item) => serialize(item))
65
- };
66
- }
67
- if (typeof value === "object") {
68
- return {
69
- type: "object",
70
- value: Object.entries(value).reduce((acc, [key, value2]) => {
71
- return {
72
- ...acc,
73
- [key]: serialize(value2)
74
- };
75
- }, {})
76
- };
77
- }
78
- return void 0;
79
- }
80
- function deserialize(data) {
81
- if (data === void 0) {
82
- return void 0;
83
- }
84
- if (typeof data === "object" && data !== null && "type" in data && "value" in data) {
85
- const { type, value } = data;
86
- switch (type) {
87
- case "null":
88
- return null;
89
- case "string":
90
- return value;
91
- case "number":
92
- return value;
93
- case "boolean":
94
- return value;
95
- case "date":
96
- return new Date(value);
97
- case "array":
98
- return value.map((item) => deserialize(item));
99
- case "object":
100
- return Object.entries(value).reduce((acc, [key, value2]) => {
101
- return {
102
- ...acc,
103
- [key]: deserialize(value2)
104
- };
105
- }, {});
106
- default:
107
- return void 0;
108
- }
109
- }
110
- return void 0;
111
- }
112
- // Annotate the CommonJS export names for ESM import in node:
113
- 0 && (module.exports = {
114
- deserialize,
115
- serialize
116
- });
@@ -1,90 +0,0 @@
1
- // src/serialize.ts
2
- function serialize(value) {
3
- if (value === void 0) {
4
- return void 0;
5
- }
6
- if (value === null) {
7
- return {
8
- type: "null",
9
- value: null
10
- };
11
- }
12
- if (typeof value === "string") {
13
- return {
14
- type: "string",
15
- value
16
- };
17
- }
18
- if (typeof value === "number") {
19
- return {
20
- type: "number",
21
- value
22
- };
23
- }
24
- if (typeof value === "boolean") {
25
- return {
26
- type: "boolean",
27
- value
28
- };
29
- }
30
- if (value instanceof Date) {
31
- return {
32
- type: "date",
33
- value: value.toISOString()
34
- };
35
- }
36
- if (Array.isArray(value)) {
37
- return {
38
- type: "array",
39
- value: value.map((item) => serialize(item))
40
- };
41
- }
42
- if (typeof value === "object") {
43
- return {
44
- type: "object",
45
- value: Object.entries(value).reduce((acc, [key, value2]) => {
46
- return {
47
- ...acc,
48
- [key]: serialize(value2)
49
- };
50
- }, {})
51
- };
52
- }
53
- return void 0;
54
- }
55
- function deserialize(data) {
56
- if (data === void 0) {
57
- return void 0;
58
- }
59
- if (typeof data === "object" && data !== null && "type" in data && "value" in data) {
60
- const { type, value } = data;
61
- switch (type) {
62
- case "null":
63
- return null;
64
- case "string":
65
- return value;
66
- case "number":
67
- return value;
68
- case "boolean":
69
- return value;
70
- case "date":
71
- return new Date(value);
72
- case "array":
73
- return value.map((item) => deserialize(item));
74
- case "object":
75
- return Object.entries(value).reduce((acc, [key, value2]) => {
76
- return {
77
- ...acc,
78
- [key]: deserialize(value2)
79
- };
80
- }, {});
81
- default:
82
- return void 0;
83
- }
84
- }
85
- return void 0;
86
- }
87
- export {
88
- deserialize,
89
- serialize
90
- };