@shipengine/elements 0.28.0 → 0.29.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/index.cjs +24 -7
- package/index.js +24 -7
- package/package.json +1 -1
- package/src/components/templates/shipment-form/shipment-form.d.ts +2 -1
- package/src/elements/configure-shipment/hooks/use-address.d.ts +1 -0
- package/src/elements/configure-shipment/hooks/use-shipment-form.d.ts +1 -0
- package/src/hooks/use-get-or-create-shipment.d.ts +4 -3
package/index.cjs
CHANGED
|
@@ -13757,6 +13757,7 @@ const getShipmentSchema = ({
|
|
|
13757
13757
|
const minimumShipDate = nextDayCutoff(17);
|
|
13758
13758
|
const maximumShipDate = daysAfter(7, minimumShipDate);
|
|
13759
13759
|
const ShipmentForm = ({
|
|
13760
|
+
addressLoading,
|
|
13760
13761
|
addressPreference,
|
|
13761
13762
|
charsetWarning,
|
|
13762
13763
|
carriers,
|
|
@@ -14103,9 +14104,7 @@ const ShipmentForm = ({
|
|
|
14103
14104
|
});
|
|
14104
14105
|
if (errors) throw new Error(errors.map(e => e.message).join(", "));
|
|
14105
14106
|
if (!shipment) throw new Error("errorMessages.unableToLoad.shipment");
|
|
14106
|
-
const addressPreferenceIsEmpty =
|
|
14107
|
-
// undefined means it's still loading
|
|
14108
|
-
addressPreference !== undefined && isEmptyAddress(addressPreference === null || addressPreference === void 0 ? void 0 : addressPreference.selection);
|
|
14107
|
+
const addressPreferenceIsEmpty = !addressLoading && isEmptyAddress(addressPreference === null || addressPreference === void 0 ? void 0 : addressPreference.selection); // undefined means it's still loading
|
|
14109
14108
|
return jsxRuntime.jsxs("form", Object.assign({
|
|
14110
14109
|
id: "shipment-form",
|
|
14111
14110
|
onSubmit: formLogger.capture(handleSubmit)
|
|
@@ -14504,7 +14503,7 @@ const ShipmentForm = ({
|
|
|
14504
14503
|
}, {
|
|
14505
14504
|
children: jsxRuntime.jsx(SubmitButton, Object.assign({
|
|
14506
14505
|
control: form.control,
|
|
14507
|
-
disabled: isEditShipFormToOpen,
|
|
14506
|
+
disabled: addressLoading || isEditShipFormToOpen || addressPreferenceIsEmpty,
|
|
14508
14507
|
variant: giger.ButtonVariant.OUTLINED
|
|
14509
14508
|
}, {
|
|
14510
14509
|
children: t("purchase-label:actions.calculateRates", {
|
|
@@ -15966,7 +15965,12 @@ const useAddress = ({
|
|
|
15966
15965
|
error: parseAddressErrors,
|
|
15967
15966
|
mutateAsync: parseAddress
|
|
15968
15967
|
} = alchemy.useParseAddress();
|
|
15969
|
-
const [addressPreference,
|
|
15968
|
+
const [addressPreference, _setAddressPreference] = React.useState();
|
|
15969
|
+
const [loading, setLoading] = React.useState(true);
|
|
15970
|
+
const setAddressPreference = React.useCallback((...args) => {
|
|
15971
|
+
setLoading(false);
|
|
15972
|
+
_setAddressPreference(...args);
|
|
15973
|
+
}, [_setAddressPreference]);
|
|
15970
15974
|
const toggle = React.useCallback(() => {
|
|
15971
15975
|
let updatedSelection = undefined;
|
|
15972
15976
|
setAddressPreference(prevState => {
|
|
@@ -16071,6 +16075,8 @@ const useAddress = ({
|
|
|
16071
16075
|
// without this check it will keep reverting a one-off label's address preference back to empty for some reason
|
|
16072
16076
|
!isEmptyAddress(shipment === null || shipment === void 0 ? void 0 : shipment.shipTo)) {
|
|
16073
16077
|
void handleValidateAddress(shipment === null || shipment === void 0 ? void 0 : shipment.shipTo, salesOrder === null || salesOrder === void 0 ? void 0 : salesOrder.shipTo);
|
|
16078
|
+
} else {
|
|
16079
|
+
setLoading(false);
|
|
16074
16080
|
}
|
|
16075
16081
|
}, [addressPreference, handleValidateAddress, salesOrder === null || salesOrder === void 0 ? void 0 : salesOrder.shipTo, shipment === null || shipment === void 0 ? void 0 : shipment.shipTo]);
|
|
16076
16082
|
const charsetWarning = React.useMemo(() => Object.keys((addressPreference === null || addressPreference === void 0 ? void 0 : addressPreference.selection) || {}).reduce((warning, key) => {
|
|
@@ -16092,6 +16098,7 @@ const useAddress = ({
|
|
|
16092
16098
|
}, undefined), [addressPreference === null || addressPreference === void 0 ? void 0 : addressPreference.selection, t]);
|
|
16093
16099
|
const errors = [...(validateAddressErrors !== null && validateAddressErrors !== void 0 ? validateAddressErrors : []), ...(updateShipmentErrors !== null && updateShipmentErrors !== void 0 ? updateShipmentErrors : []), ...(parseAddressErrors !== null && parseAddressErrors !== void 0 ? parseAddressErrors : [])];
|
|
16094
16100
|
return {
|
|
16101
|
+
addressLoading: loading,
|
|
16095
16102
|
addressErrors: errors.length > 0 ? errors : undefined,
|
|
16096
16103
|
addressPreference,
|
|
16097
16104
|
charsetWarning,
|
|
@@ -16508,6 +16515,7 @@ const useShipmentForm = ({
|
|
|
16508
16515
|
reset: resetSalesOrderShipment
|
|
16509
16516
|
} = alchemy.useUpdateSalesOrderShipment();
|
|
16510
16517
|
const {
|
|
16518
|
+
addressLoading,
|
|
16511
16519
|
addressErrors,
|
|
16512
16520
|
addressPreference,
|
|
16513
16521
|
charsetWarning,
|
|
@@ -16558,6 +16566,7 @@ const useShipmentForm = ({
|
|
|
16558
16566
|
scrubber: React.useCallback(() => "common:errorMessages.noRatesAvailable", [])
|
|
16559
16567
|
});
|
|
16560
16568
|
return {
|
|
16569
|
+
addressLoading,
|
|
16561
16570
|
addressPreference,
|
|
16562
16571
|
carriers,
|
|
16563
16572
|
charsetWarning,
|
|
@@ -16860,13 +16869,14 @@ const getDefaultWarehouse = warehouses => {
|
|
|
16860
16869
|
return (_a = warehouses === null || warehouses === void 0 ? void 0 : warehouses.find(w => w.isDefault)) !== null && _a !== void 0 ? _a : warehouses === null || warehouses === void 0 ? void 0 : warehouses[0];
|
|
16861
16870
|
};
|
|
16862
16871
|
|
|
16863
|
-
const useGetOrCreateShipment = shipmentId => {
|
|
16872
|
+
const useGetOrCreateShipment = (onShipmentUpdated, shipmentId) => {
|
|
16864
16873
|
var _a, _b;
|
|
16865
16874
|
const {
|
|
16866
16875
|
data: warehouses
|
|
16867
16876
|
} = alchemy.useListWarehouses({
|
|
16868
16877
|
enabled: shipmentId === undefined
|
|
16869
16878
|
});
|
|
16879
|
+
const [shouldTriggerUpdate, setShouldTriggerUpdate] = React.useState(false);
|
|
16870
16880
|
const createShipment = alchemy.useCreateShipment();
|
|
16871
16881
|
// useCreateShipment as called by this hook will only ever create one shipment at a time,
|
|
16872
16882
|
// lens it for convenience
|
|
@@ -16880,9 +16890,16 @@ const useGetOrCreateShipment = shipmentId => {
|
|
|
16880
16890
|
createShipment.mutate({
|
|
16881
16891
|
warehouseId: getDefaultWarehouse(warehouses).warehouseId
|
|
16882
16892
|
});
|
|
16893
|
+
setShouldTriggerUpdate(true);
|
|
16883
16894
|
}
|
|
16884
16895
|
}, [warehouses, shipmentId, createShipment, createdShipment]);
|
|
16885
16896
|
const getShipment = alchemy.useGetShipment(shipmentId !== null && shipmentId !== void 0 ? shipmentId : createdShipment === null || createdShipment === void 0 ? void 0 : createdShipment.shipmentId);
|
|
16897
|
+
React.useEffect(() => {
|
|
16898
|
+
if (shouldTriggerUpdate && getShipment.data) {
|
|
16899
|
+
onShipmentUpdated === null || onShipmentUpdated === void 0 ? void 0 : onShipmentUpdated(getShipment.data);
|
|
16900
|
+
setShouldTriggerUpdate(false);
|
|
16901
|
+
}
|
|
16902
|
+
}, [shouldTriggerUpdate, getShipment]);
|
|
16886
16903
|
const errors = [...((_a = getShipment.error) !== null && _a !== void 0 ? _a : []), ...((_b = createShipment.error) !== null && _b !== void 0 ? _b : [])];
|
|
16887
16904
|
return {
|
|
16888
16905
|
errors: errors.length > 0 ? errors : undefined,
|
|
@@ -16901,7 +16918,7 @@ const PurchaseLabelByShipment = _a => {
|
|
|
16901
16918
|
shipmentId
|
|
16902
16919
|
} = _a,
|
|
16903
16920
|
props = __rest(_a, ["onLoad", "onShipmentUpdated", "shipmentId"]);
|
|
16904
|
-
const _b = useGetOrCreateShipment(shipmentId),
|
|
16921
|
+
const _b = useGetOrCreateShipment(onShipmentUpdated, shipmentId),
|
|
16905
16922
|
{
|
|
16906
16923
|
shipment
|
|
16907
16924
|
} = _b,
|
package/index.js
CHANGED
|
@@ -13725,6 +13725,7 @@ const getShipmentSchema = ({
|
|
|
13725
13725
|
const minimumShipDate = nextDayCutoff(17);
|
|
13726
13726
|
const maximumShipDate = daysAfter(7, minimumShipDate);
|
|
13727
13727
|
const ShipmentForm = ({
|
|
13728
|
+
addressLoading,
|
|
13728
13729
|
addressPreference,
|
|
13729
13730
|
charsetWarning,
|
|
13730
13731
|
carriers,
|
|
@@ -14071,9 +14072,7 @@ const ShipmentForm = ({
|
|
|
14071
14072
|
});
|
|
14072
14073
|
if (errors) throw new Error(errors.map(e => e.message).join(", "));
|
|
14073
14074
|
if (!shipment) throw new Error("errorMessages.unableToLoad.shipment");
|
|
14074
|
-
const addressPreferenceIsEmpty =
|
|
14075
|
-
// undefined means it's still loading
|
|
14076
|
-
addressPreference !== undefined && isEmptyAddress(addressPreference === null || addressPreference === void 0 ? void 0 : addressPreference.selection);
|
|
14075
|
+
const addressPreferenceIsEmpty = !addressLoading && isEmptyAddress(addressPreference === null || addressPreference === void 0 ? void 0 : addressPreference.selection); // undefined means it's still loading
|
|
14077
14076
|
return jsxs("form", Object.assign({
|
|
14078
14077
|
id: "shipment-form",
|
|
14079
14078
|
onSubmit: formLogger.capture(handleSubmit)
|
|
@@ -14472,7 +14471,7 @@ const ShipmentForm = ({
|
|
|
14472
14471
|
}, {
|
|
14473
14472
|
children: jsx(SubmitButton, Object.assign({
|
|
14474
14473
|
control: form.control,
|
|
14475
|
-
disabled: isEditShipFormToOpen,
|
|
14474
|
+
disabled: addressLoading || isEditShipFormToOpen || addressPreferenceIsEmpty,
|
|
14476
14475
|
variant: ButtonVariant.OUTLINED
|
|
14477
14476
|
}, {
|
|
14478
14477
|
children: t("purchase-label:actions.calculateRates", {
|
|
@@ -15934,7 +15933,12 @@ const useAddress = ({
|
|
|
15934
15933
|
error: parseAddressErrors,
|
|
15935
15934
|
mutateAsync: parseAddress
|
|
15936
15935
|
} = useParseAddress();
|
|
15937
|
-
const [addressPreference,
|
|
15936
|
+
const [addressPreference, _setAddressPreference] = useState();
|
|
15937
|
+
const [loading, setLoading] = useState(true);
|
|
15938
|
+
const setAddressPreference = useCallback((...args) => {
|
|
15939
|
+
setLoading(false);
|
|
15940
|
+
_setAddressPreference(...args);
|
|
15941
|
+
}, [_setAddressPreference]);
|
|
15938
15942
|
const toggle = useCallback(() => {
|
|
15939
15943
|
let updatedSelection = undefined;
|
|
15940
15944
|
setAddressPreference(prevState => {
|
|
@@ -16039,6 +16043,8 @@ const useAddress = ({
|
|
|
16039
16043
|
// without this check it will keep reverting a one-off label's address preference back to empty for some reason
|
|
16040
16044
|
!isEmptyAddress(shipment === null || shipment === void 0 ? void 0 : shipment.shipTo)) {
|
|
16041
16045
|
void handleValidateAddress(shipment === null || shipment === void 0 ? void 0 : shipment.shipTo, salesOrder === null || salesOrder === void 0 ? void 0 : salesOrder.shipTo);
|
|
16046
|
+
} else {
|
|
16047
|
+
setLoading(false);
|
|
16042
16048
|
}
|
|
16043
16049
|
}, [addressPreference, handleValidateAddress, salesOrder === null || salesOrder === void 0 ? void 0 : salesOrder.shipTo, shipment === null || shipment === void 0 ? void 0 : shipment.shipTo]);
|
|
16044
16050
|
const charsetWarning = useMemo(() => Object.keys((addressPreference === null || addressPreference === void 0 ? void 0 : addressPreference.selection) || {}).reduce((warning, key) => {
|
|
@@ -16060,6 +16066,7 @@ const useAddress = ({
|
|
|
16060
16066
|
}, undefined), [addressPreference === null || addressPreference === void 0 ? void 0 : addressPreference.selection, t]);
|
|
16061
16067
|
const errors = [...(validateAddressErrors !== null && validateAddressErrors !== void 0 ? validateAddressErrors : []), ...(updateShipmentErrors !== null && updateShipmentErrors !== void 0 ? updateShipmentErrors : []), ...(parseAddressErrors !== null && parseAddressErrors !== void 0 ? parseAddressErrors : [])];
|
|
16062
16068
|
return {
|
|
16069
|
+
addressLoading: loading,
|
|
16063
16070
|
addressErrors: errors.length > 0 ? errors : undefined,
|
|
16064
16071
|
addressPreference,
|
|
16065
16072
|
charsetWarning,
|
|
@@ -16476,6 +16483,7 @@ const useShipmentForm = ({
|
|
|
16476
16483
|
reset: resetSalesOrderShipment
|
|
16477
16484
|
} = useUpdateSalesOrderShipment();
|
|
16478
16485
|
const {
|
|
16486
|
+
addressLoading,
|
|
16479
16487
|
addressErrors,
|
|
16480
16488
|
addressPreference,
|
|
16481
16489
|
charsetWarning,
|
|
@@ -16526,6 +16534,7 @@ const useShipmentForm = ({
|
|
|
16526
16534
|
scrubber: useCallback(() => "common:errorMessages.noRatesAvailable", [])
|
|
16527
16535
|
});
|
|
16528
16536
|
return {
|
|
16537
|
+
addressLoading,
|
|
16529
16538
|
addressPreference,
|
|
16530
16539
|
carriers,
|
|
16531
16540
|
charsetWarning,
|
|
@@ -16828,13 +16837,14 @@ const getDefaultWarehouse = warehouses => {
|
|
|
16828
16837
|
return (_a = warehouses === null || warehouses === void 0 ? void 0 : warehouses.find(w => w.isDefault)) !== null && _a !== void 0 ? _a : warehouses === null || warehouses === void 0 ? void 0 : warehouses[0];
|
|
16829
16838
|
};
|
|
16830
16839
|
|
|
16831
|
-
const useGetOrCreateShipment = shipmentId => {
|
|
16840
|
+
const useGetOrCreateShipment = (onShipmentUpdated, shipmentId) => {
|
|
16832
16841
|
var _a, _b;
|
|
16833
16842
|
const {
|
|
16834
16843
|
data: warehouses
|
|
16835
16844
|
} = useListWarehouses({
|
|
16836
16845
|
enabled: shipmentId === undefined
|
|
16837
16846
|
});
|
|
16847
|
+
const [shouldTriggerUpdate, setShouldTriggerUpdate] = useState(false);
|
|
16838
16848
|
const createShipment = useCreateShipment();
|
|
16839
16849
|
// useCreateShipment as called by this hook will only ever create one shipment at a time,
|
|
16840
16850
|
// lens it for convenience
|
|
@@ -16848,9 +16858,16 @@ const useGetOrCreateShipment = shipmentId => {
|
|
|
16848
16858
|
createShipment.mutate({
|
|
16849
16859
|
warehouseId: getDefaultWarehouse(warehouses).warehouseId
|
|
16850
16860
|
});
|
|
16861
|
+
setShouldTriggerUpdate(true);
|
|
16851
16862
|
}
|
|
16852
16863
|
}, [warehouses, shipmentId, createShipment, createdShipment]);
|
|
16853
16864
|
const getShipment = useGetShipment(shipmentId !== null && shipmentId !== void 0 ? shipmentId : createdShipment === null || createdShipment === void 0 ? void 0 : createdShipment.shipmentId);
|
|
16865
|
+
useEffect(() => {
|
|
16866
|
+
if (shouldTriggerUpdate && getShipment.data) {
|
|
16867
|
+
onShipmentUpdated === null || onShipmentUpdated === void 0 ? void 0 : onShipmentUpdated(getShipment.data);
|
|
16868
|
+
setShouldTriggerUpdate(false);
|
|
16869
|
+
}
|
|
16870
|
+
}, [shouldTriggerUpdate, getShipment]);
|
|
16854
16871
|
const errors = [...((_a = getShipment.error) !== null && _a !== void 0 ? _a : []), ...((_b = createShipment.error) !== null && _b !== void 0 ? _b : [])];
|
|
16855
16872
|
return {
|
|
16856
16873
|
errors: errors.length > 0 ? errors : undefined,
|
|
@@ -16869,7 +16886,7 @@ const PurchaseLabelByShipment = _a => {
|
|
|
16869
16886
|
shipmentId
|
|
16870
16887
|
} = _a,
|
|
16871
16888
|
props = __rest(_a, ["onLoad", "onShipmentUpdated", "shipmentId"]);
|
|
16872
|
-
const _b = useGetOrCreateShipment(shipmentId),
|
|
16889
|
+
const _b = useGetOrCreateShipment(onShipmentUpdated, shipmentId),
|
|
16873
16890
|
{
|
|
16874
16891
|
shipment
|
|
16875
16892
|
} = _b,
|
package/package.json
CHANGED
|
@@ -9,6 +9,7 @@ export type OnChangeAddressOptions = {
|
|
|
9
9
|
};
|
|
10
10
|
export type ShipmentFormMode = "browse_rates" | "select_service";
|
|
11
11
|
export type ShipmentFormProps = {
|
|
12
|
+
addressLoading: boolean;
|
|
12
13
|
addressPreference?: AddressPreference;
|
|
13
14
|
carriers?: SE.Carrier[];
|
|
14
15
|
charsetWarning?: CharsetWarning;
|
|
@@ -48,4 +49,4 @@ export type ShipmentFormFeatures = {
|
|
|
48
49
|
selectService?: boolean;
|
|
49
50
|
shippingPresets?: boolean;
|
|
50
51
|
};
|
|
51
|
-
export declare const ShipmentForm: ({ addressPreference, charsetWarning, carriers, customPackageTypes, errors, features, hydrateRef, insuranceAccount, isLoading, onApplyPreset, onChangeAddress, onChangeMode, onDirty, onSubmit, onSubmitParseShipTo, onToggleAddressPreferenceDisclosure, onUpdateCustoms, salesOrder, shipment, shippingPresets, warehouseId, warehouses, }: ShipmentFormProps) => import("@emotion/react/jsx-runtime").JSX.Element;
|
|
52
|
+
export declare const ShipmentForm: ({ addressLoading, addressPreference, charsetWarning, carriers, customPackageTypes, errors, features, hydrateRef, insuranceAccount, isLoading, onApplyPreset, onChangeAddress, onChangeMode, onDirty, onSubmit, onSubmitParseShipTo, onToggleAddressPreferenceDisclosure, onUpdateCustoms, salesOrder, shipment, shippingPresets, warehouseId, warehouses, }: ShipmentFormProps) => import("@emotion/react/jsx-runtime").JSX.Element;
|
|
@@ -9,6 +9,7 @@ export type UseAddressProps = {
|
|
|
9
9
|
shipment?: SE.SalesOrderShipment;
|
|
10
10
|
};
|
|
11
11
|
export declare const useAddress: ({ compatibleCountryCodes, onChange, onValidation, salesOrder, shipment, }: UseAddressProps) => {
|
|
12
|
+
addressLoading: boolean;
|
|
12
13
|
addressErrors: SE.CodedError[] | undefined;
|
|
13
14
|
addressPreference: Templates.AddressPreference | undefined;
|
|
14
15
|
charsetWarning: Templates.CharsetWarning | undefined;
|
|
@@ -13,6 +13,7 @@ export type UseShipmentFormProps = {
|
|
|
13
13
|
shipment?: SE.SalesOrderShipment;
|
|
14
14
|
};
|
|
15
15
|
export declare const useShipmentForm: ({ compatibleCountryCodes, onAddressValidation, onApplyPreset, onChangeAddress, onShipmentUpdated, onSubmit, salesOrder, shipment, }: UseShipmentFormProps) => {
|
|
16
|
+
addressLoading: boolean;
|
|
16
17
|
addressPreference: import("../../../components/templates").AddressPreference | undefined;
|
|
17
18
|
carriers: SE.Carrier[] | undefined;
|
|
18
19
|
charsetWarning: import("../../../components/templates").CharsetWarning | undefined;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
import { SalesOrderShipment } from "@shipengine/alchemy";
|
|
2
|
+
export declare const useGetOrCreateShipment: (onShipmentUpdated: ((shipment: SalesOrderShipment) => void | Promise<void>) | undefined, shipmentId?: string) => {
|
|
2
3
|
errors: import("@shipengine/alchemy").CodedError[] | undefined;
|
|
3
4
|
isLoading: boolean;
|
|
4
|
-
refetchShipment: <TPageData>(options?: (import("react-query").RefetchOptions & import("react-query").RefetchQueryFilters<TPageData>) | undefined) => Promise<import("react-query").QueryObserverResult<
|
|
5
|
-
shipment:
|
|
5
|
+
refetchShipment: <TPageData>(options?: (import("react-query").RefetchOptions & import("react-query").RefetchQueryFilters<TPageData>) | undefined) => Promise<import("react-query").QueryObserverResult<SalesOrderShipment, import("@shipengine/alchemy").CodedError[]>>;
|
|
6
|
+
shipment: SalesOrderShipment | undefined;
|
|
6
7
|
};
|