clear-react-router 1.6.7 → 1.6.9
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/README.md +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +95 -14
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -272,7 +272,7 @@ Actions can be executed declaratively with `<Form />` or imperatively with `useA
|
|
|
272
272
|
import { Form, useFormContext } from '../clear-router';
|
|
273
273
|
|
|
274
274
|
const SubmitButton = () => {
|
|
275
|
-
const {isSubmitting} = useFormContext()
|
|
275
|
+
const { isSubmitting } = useFormContext()
|
|
276
276
|
return <button disabled={isSubmitting} type='submit'>Save</button>
|
|
277
277
|
}
|
|
278
278
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,12 +1,14 @@
|
|
|
1
1
|
export { RouterProvider } from './components/RouterProvider';
|
|
2
2
|
export { Router } from './components/Router';
|
|
3
3
|
export { Link } from './components/Link';
|
|
4
|
+
export { Form } from './components/Form';
|
|
4
5
|
export { useNavigate } from './hooks/useNavigate';
|
|
5
6
|
export { useParams } from './hooks/useParams';
|
|
6
7
|
export { useLocation } from './hooks/useLocation';
|
|
7
8
|
export { useLoaderState } from './hooks/useLoaderState';
|
|
8
9
|
export { useInvalidate } from './hooks/useInvalidate';
|
|
9
10
|
export { useBlocker } from './hooks/useBlocker';
|
|
11
|
+
export { useAction } from './hooks/useAction';
|
|
10
12
|
export { useBeforeUnload } from './hooks/useBeforeUnload';
|
|
11
13
|
export { useRouterContext } from './hooks/useRouterContext';
|
|
12
14
|
export { useQueryParam } from './hooks/useQueryParam';
|
package/dist/index.js
CHANGED
|
@@ -112,7 +112,7 @@ var useCurrentLoaderState = createState(emptyLoaderState);
|
|
|
112
112
|
var useScrollMap = createState({});
|
|
113
113
|
var useContextState = createState({});
|
|
114
114
|
//#endregion
|
|
115
|
-
//#region \0@oxc-project+runtime@0.
|
|
115
|
+
//#region \0@oxc-project+runtime@0.133.0/helpers/esm/typeof.js
|
|
116
116
|
function _typeof(o) {
|
|
117
117
|
"@babel/helpers - typeof";
|
|
118
118
|
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(o) {
|
|
@@ -122,7 +122,7 @@ function _typeof(o) {
|
|
|
122
122
|
}, _typeof(o);
|
|
123
123
|
}
|
|
124
124
|
//#endregion
|
|
125
|
-
//#region \0@oxc-project+runtime@0.
|
|
125
|
+
//#region \0@oxc-project+runtime@0.133.0/helpers/esm/toPrimitive.js
|
|
126
126
|
function toPrimitive(t, r) {
|
|
127
127
|
if ("object" != _typeof(t) || !t) return t;
|
|
128
128
|
var e = t[Symbol.toPrimitive];
|
|
@@ -134,13 +134,13 @@ function toPrimitive(t, r) {
|
|
|
134
134
|
return ("string" === r ? String : Number)(t);
|
|
135
135
|
}
|
|
136
136
|
//#endregion
|
|
137
|
-
//#region \0@oxc-project+runtime@0.
|
|
137
|
+
//#region \0@oxc-project+runtime@0.133.0/helpers/esm/toPropertyKey.js
|
|
138
138
|
function toPropertyKey(t) {
|
|
139
139
|
var i = toPrimitive(t, "string");
|
|
140
140
|
return "symbol" == _typeof(i) ? i : i + "";
|
|
141
141
|
}
|
|
142
142
|
//#endregion
|
|
143
|
-
//#region \0@oxc-project+runtime@0.
|
|
143
|
+
//#region \0@oxc-project+runtime@0.133.0/helpers/esm/defineProperty.js
|
|
144
144
|
function _defineProperty(e, r, t) {
|
|
145
145
|
return (r = toPropertyKey(r)) in e ? Object.defineProperty(e, r, {
|
|
146
146
|
value: t,
|
|
@@ -704,6 +704,12 @@ var Link = ({ children, to, prefetch: prefetchLink, hoverPrefetchDelay }) => {
|
|
|
704
704
|
});
|
|
705
705
|
};
|
|
706
706
|
//#endregion
|
|
707
|
+
//#region hooks/useInvalidate.ts
|
|
708
|
+
var useInvalidate = () => {
|
|
709
|
+
const { invalidate } = useRouterActions();
|
|
710
|
+
return invalidate;
|
|
711
|
+
};
|
|
712
|
+
//#endregion
|
|
707
713
|
//#region hooks/useParams.ts
|
|
708
714
|
var useParams = () => {
|
|
709
715
|
const [routeItemData] = useRouteItemData();
|
|
@@ -715,18 +721,61 @@ var useParams = () => {
|
|
|
715
721
|
});
|
|
716
722
|
};
|
|
717
723
|
//#endregion
|
|
724
|
+
//#region context/FormContext.ts
|
|
725
|
+
var FormContext = createContext({ isSubmitting: false });
|
|
726
|
+
//#endregion
|
|
727
|
+
//#region provider/FormProvider.tsx
|
|
728
|
+
var FormProvider = ({ children, isSubmitting }) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FormContext.Provider, {
|
|
729
|
+
value: { isSubmitting },
|
|
730
|
+
children
|
|
731
|
+
});
|
|
732
|
+
//#endregion
|
|
733
|
+
//#region components/Form.tsx
|
|
734
|
+
var Form = ({ children, action: actionKey, onSuccess, onError, autoReset = true }) => {
|
|
735
|
+
const invalidate = useInvalidate();
|
|
736
|
+
const [routeItemData] = useRouteItemData();
|
|
737
|
+
const [context, setContext] = useContextState();
|
|
738
|
+
const params = useParams();
|
|
739
|
+
const { routeItem } = routeItemData;
|
|
740
|
+
const [isSubmitting, setIsSubmitting] = useState(false);
|
|
741
|
+
const onSubmit = async (evt) => {
|
|
742
|
+
evt.preventDefault();
|
|
743
|
+
if (!routeItem) throw new Error("Route not found");
|
|
744
|
+
if (!routeItem.actions) throw new Error("Route action creator not found");
|
|
745
|
+
const action = routeItem.actions({
|
|
746
|
+
context,
|
|
747
|
+
setContext,
|
|
748
|
+
params,
|
|
749
|
+
invalidate
|
|
750
|
+
})[actionKey];
|
|
751
|
+
if (!action) throw new Error(`Action "${actionKey}" not found`);
|
|
752
|
+
try {
|
|
753
|
+
setIsSubmitting(true);
|
|
754
|
+
const result = await action(new FormData(evt.target));
|
|
755
|
+
await invalidate();
|
|
756
|
+
if (autoReset) evt.target.reset();
|
|
757
|
+
onSuccess?.(result);
|
|
758
|
+
} catch (error) {
|
|
759
|
+
onError?.(error);
|
|
760
|
+
} finally {
|
|
761
|
+
setIsSubmitting(false);
|
|
762
|
+
}
|
|
763
|
+
};
|
|
764
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(FormProvider, {
|
|
765
|
+
isSubmitting,
|
|
766
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)("form", {
|
|
767
|
+
onSubmit,
|
|
768
|
+
children
|
|
769
|
+
})
|
|
770
|
+
});
|
|
771
|
+
};
|
|
772
|
+
//#endregion
|
|
718
773
|
//#region hooks/useLoaderState.ts
|
|
719
774
|
var useLoaderState = () => {
|
|
720
775
|
const [loaderState] = useCurrentLoaderState();
|
|
721
776
|
return loaderState;
|
|
722
777
|
};
|
|
723
778
|
//#endregion
|
|
724
|
-
//#region hooks/useInvalidate.ts
|
|
725
|
-
var useInvalidate = () => {
|
|
726
|
-
const { invalidate } = useRouterActions();
|
|
727
|
-
return invalidate;
|
|
728
|
-
};
|
|
729
|
-
//#endregion
|
|
730
779
|
//#region hooks/useBlocker.ts
|
|
731
780
|
var useBlocker = (blockerFn) => {
|
|
732
781
|
const [blockedRoute, setBlockedRoute] = useBlockedRoute();
|
|
@@ -771,6 +820,41 @@ var useBlocker = (blockerFn) => {
|
|
|
771
820
|
};
|
|
772
821
|
};
|
|
773
822
|
//#endregion
|
|
823
|
+
//#region hooks/useAction.ts
|
|
824
|
+
var useAction = (actionKey, onError) => {
|
|
825
|
+
const invalidate = useInvalidate();
|
|
826
|
+
const [routeItemData] = useRouteItemData();
|
|
827
|
+
const [context, setContext] = useContextState();
|
|
828
|
+
const params = useParams();
|
|
829
|
+
const { routeItem } = routeItemData;
|
|
830
|
+
const latestContext = useLatest(context);
|
|
831
|
+
return useCallback(async (formData) => {
|
|
832
|
+
if (!routeItem) throw new Error("Route not found");
|
|
833
|
+
if (!routeItem.actions) throw new Error("Route action creator not found");
|
|
834
|
+
const action = routeItem.actions({
|
|
835
|
+
context: latestContext.current,
|
|
836
|
+
setContext,
|
|
837
|
+
params,
|
|
838
|
+
invalidate
|
|
839
|
+
})[actionKey];
|
|
840
|
+
if (!action) throw new Error(`Action "${actionKey}" not found`);
|
|
841
|
+
try {
|
|
842
|
+
await action(formData);
|
|
843
|
+
await invalidate();
|
|
844
|
+
} catch (error) {
|
|
845
|
+
onError?.(error);
|
|
846
|
+
}
|
|
847
|
+
}, [
|
|
848
|
+
actionKey,
|
|
849
|
+
latestContext,
|
|
850
|
+
invalidate,
|
|
851
|
+
onError,
|
|
852
|
+
params,
|
|
853
|
+
routeItem,
|
|
854
|
+
setContext
|
|
855
|
+
]);
|
|
856
|
+
};
|
|
857
|
+
//#endregion
|
|
774
858
|
//#region hooks/useBeforeUnload.ts
|
|
775
859
|
var useBeforeUnload = (callback) => {
|
|
776
860
|
useEffect(() => {
|
|
@@ -892,9 +976,6 @@ var useHistoricalTrail = () => {
|
|
|
892
976
|
return trail;
|
|
893
977
|
};
|
|
894
978
|
//#endregion
|
|
895
|
-
//#region context/FormContext.ts
|
|
896
|
-
var FormContext = createContext({ isSubmitting: false });
|
|
897
|
-
//#endregion
|
|
898
979
|
//#region hooks/useFormContext.ts
|
|
899
980
|
var useFormContext = () => useContext(FormContext);
|
|
900
981
|
//#endregion
|
|
@@ -960,4 +1041,4 @@ var adapter = {
|
|
|
960
1041
|
})
|
|
961
1042
|
};
|
|
962
1043
|
//#endregion
|
|
963
|
-
export { Link, Router, RouterProvider, adapter, createRouter, useBeforeUnload, useBlocker, useFormContext, useHistoricalTrail, useInvalidate, useLoaderState, useLocation, useNavigate, useParams, useQueryParam, useRouterContext, useSearchParams };
|
|
1044
|
+
export { Form, Link, Router, RouterProvider, adapter, createRouter, useAction, useBeforeUnload, useBlocker, useFormContext, useHistoricalTrail, useInvalidate, useLoaderState, useLocation, useNavigate, useParams, useQueryParam, useRouterContext, useSearchParams };
|