@trackunit/react-core-hooks 0.2.192 → 0.2.194
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.js +84 -24
- package/index.esm.js +85 -26
- package/package.json +1 -1
- package/src/images/useImageUploader.d.ts +21 -0
- package/src/index.d.ts +1 -0
package/index.cjs.js
CHANGED
|
@@ -162,6 +162,89 @@ const useFilterBarContext = () => {
|
|
|
162
162
|
*/
|
|
163
163
|
const FilterBarProvider = (props) => jsxRuntime.jsx(FilterBarContext.Provider, Object.assign({}, props));
|
|
164
164
|
|
|
165
|
+
const TokenContext = React__namespace.createContext(null);
|
|
166
|
+
/**
|
|
167
|
+
* This is a hook to use the TokenContext.
|
|
168
|
+
*
|
|
169
|
+
* @requires TokenProvider
|
|
170
|
+
* @example
|
|
171
|
+
* import { useToken } from "@trackunit/react-core-hooks";
|
|
172
|
+
* const { token } = useToken();
|
|
173
|
+
* @see {@link ITokenContext}
|
|
174
|
+
*/
|
|
175
|
+
const useToken = () => {
|
|
176
|
+
const context = React__namespace.useContext(TokenContext);
|
|
177
|
+
if (!context) {
|
|
178
|
+
throw new Error("useToken must be used within the TokenContext");
|
|
179
|
+
}
|
|
180
|
+
return context;
|
|
181
|
+
};
|
|
182
|
+
/**
|
|
183
|
+
* This is a provider for the TokenContext.
|
|
184
|
+
*/
|
|
185
|
+
const TokenProvider = (props) => {
|
|
186
|
+
return jsxRuntime.jsx(TokenContext.Provider, Object.assign({}, props));
|
|
187
|
+
};
|
|
188
|
+
|
|
189
|
+
const base64ToBlob = (base64, contentType = "") => {
|
|
190
|
+
const result = base64.split(",");
|
|
191
|
+
if (result.length === 2 && result[1]) {
|
|
192
|
+
const byteCharacters = atob(result[1]);
|
|
193
|
+
const byteArrays = [];
|
|
194
|
+
for (let offset = 0; offset < byteCharacters.length; offset += 512) {
|
|
195
|
+
const slice = byteCharacters.slice(offset, offset + 512);
|
|
196
|
+
const byteNumbers = new Array(slice.length);
|
|
197
|
+
for (let i = 0; i < slice.length; i++) {
|
|
198
|
+
byteNumbers[i] = slice.charCodeAt(i);
|
|
199
|
+
}
|
|
200
|
+
const byteArray = new Uint8Array(byteNumbers);
|
|
201
|
+
byteArrays.push(byteArray);
|
|
202
|
+
}
|
|
203
|
+
return new Blob(byteArrays, { type: contentType });
|
|
204
|
+
}
|
|
205
|
+
throw new Error();
|
|
206
|
+
};
|
|
207
|
+
/**
|
|
208
|
+
* useImageUploader
|
|
209
|
+
*
|
|
210
|
+
* @description Hook for uploading an image
|
|
211
|
+
* @param {Function} uploadImage - function for uploading an image
|
|
212
|
+
* @param {boolean} loading - loading state
|
|
213
|
+
* @returns {object} uploadImage - function for uploading an image, loading - loading state
|
|
214
|
+
*/
|
|
215
|
+
const useImageUploader = () => {
|
|
216
|
+
const { token } = useToken();
|
|
217
|
+
const [loading, setLoading] = React.useState(false);
|
|
218
|
+
const uploadImage = React.useCallback(({ postUrl, base64Image, type }) => {
|
|
219
|
+
setLoading(true);
|
|
220
|
+
return new Promise((resolve, reject) => {
|
|
221
|
+
const formData = new FormData();
|
|
222
|
+
const blob = base64ToBlob(base64Image);
|
|
223
|
+
formData.append("file", blob, `file.${type}`);
|
|
224
|
+
fetch(postUrl, {
|
|
225
|
+
method: "POST",
|
|
226
|
+
body: formData,
|
|
227
|
+
headers: {
|
|
228
|
+
Authorization: `Bearer ${token}`,
|
|
229
|
+
},
|
|
230
|
+
}).then(response => {
|
|
231
|
+
setLoading(false);
|
|
232
|
+
if (response.status === 413) {
|
|
233
|
+
reject("status 413 - maximumSizeExceeded");
|
|
234
|
+
}
|
|
235
|
+
if (!response.ok) {
|
|
236
|
+
reject("response not OK - saveError");
|
|
237
|
+
}
|
|
238
|
+
resolve(true);
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
}, [token]);
|
|
242
|
+
return {
|
|
243
|
+
uploadImage,
|
|
244
|
+
loading,
|
|
245
|
+
};
|
|
246
|
+
};
|
|
247
|
+
|
|
165
248
|
const OemBrandingContext = React.createContext(null);
|
|
166
249
|
/**
|
|
167
250
|
* This is a hook to use the IOemBrandingContext.
|
|
@@ -562,30 +645,6 @@ const useToast = () => {
|
|
|
562
645
|
return toastContext;
|
|
563
646
|
};
|
|
564
647
|
|
|
565
|
-
const TokenContext = React__namespace.createContext(null);
|
|
566
|
-
/**
|
|
567
|
-
* This is a hook to use the TokenContext.
|
|
568
|
-
*
|
|
569
|
-
* @requires TokenProvider
|
|
570
|
-
* @example
|
|
571
|
-
* import { useToken } from "@trackunit/react-core-hooks";
|
|
572
|
-
* const { token } = useToken();
|
|
573
|
-
* @see {@link ITokenContext}
|
|
574
|
-
*/
|
|
575
|
-
const useToken = () => {
|
|
576
|
-
const context = React__namespace.useContext(TokenContext);
|
|
577
|
-
if (!context) {
|
|
578
|
-
throw new Error("useToken must be used within the TokenContext");
|
|
579
|
-
}
|
|
580
|
-
return context;
|
|
581
|
-
};
|
|
582
|
-
/**
|
|
583
|
-
* This is a provider for the TokenContext.
|
|
584
|
-
*/
|
|
585
|
-
const TokenProvider = (props) => {
|
|
586
|
-
return jsxRuntime.jsx(TokenContext.Provider, Object.assign({}, props));
|
|
587
|
-
};
|
|
588
|
-
|
|
589
648
|
/**
|
|
590
649
|
* Hook for filtering a list of items by text search, client side search in a list.
|
|
591
650
|
*
|
|
@@ -743,6 +802,7 @@ exports.useEnvironment = useEnvironment;
|
|
|
743
802
|
exports.useEventRuntime = useEventRuntime;
|
|
744
803
|
exports.useFilterBarContext = useFilterBarContext;
|
|
745
804
|
exports.useHasAccessTo = useHasAccessTo;
|
|
805
|
+
exports.useImageUploader = useImageUploader;
|
|
746
806
|
exports.useIrisAppId = useIrisAppId;
|
|
747
807
|
exports.useIrisAppName = useIrisAppName;
|
|
748
808
|
exports.useNavigateInHost = useNavigateInHost;
|
package/index.esm.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { createContext, useContext, useState, useEffect, useMemo } from 'react';
|
|
2
|
+
import { createContext, useContext, useState, useCallback, useEffect, useMemo } from 'react';
|
|
3
3
|
import { jsx } from 'react/jsx-runtime';
|
|
4
4
|
import { AssetRuntime, CustomerRuntime, EventRuntime, ParamsRuntime, SiteRuntime } from '@trackunit/iris-app-runtime-core';
|
|
5
5
|
import { filterByMultiple } from '@trackunit/shared-utils';
|
|
@@ -139,6 +139,89 @@ const useFilterBarContext = () => {
|
|
|
139
139
|
*/
|
|
140
140
|
const FilterBarProvider = (props) => jsx(FilterBarContext.Provider, Object.assign({}, props));
|
|
141
141
|
|
|
142
|
+
const TokenContext = React.createContext(null);
|
|
143
|
+
/**
|
|
144
|
+
* This is a hook to use the TokenContext.
|
|
145
|
+
*
|
|
146
|
+
* @requires TokenProvider
|
|
147
|
+
* @example
|
|
148
|
+
* import { useToken } from "@trackunit/react-core-hooks";
|
|
149
|
+
* const { token } = useToken();
|
|
150
|
+
* @see {@link ITokenContext}
|
|
151
|
+
*/
|
|
152
|
+
const useToken = () => {
|
|
153
|
+
const context = React.useContext(TokenContext);
|
|
154
|
+
if (!context) {
|
|
155
|
+
throw new Error("useToken must be used within the TokenContext");
|
|
156
|
+
}
|
|
157
|
+
return context;
|
|
158
|
+
};
|
|
159
|
+
/**
|
|
160
|
+
* This is a provider for the TokenContext.
|
|
161
|
+
*/
|
|
162
|
+
const TokenProvider = (props) => {
|
|
163
|
+
return jsx(TokenContext.Provider, Object.assign({}, props));
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
const base64ToBlob = (base64, contentType = "") => {
|
|
167
|
+
const result = base64.split(",");
|
|
168
|
+
if (result.length === 2 && result[1]) {
|
|
169
|
+
const byteCharacters = atob(result[1]);
|
|
170
|
+
const byteArrays = [];
|
|
171
|
+
for (let offset = 0; offset < byteCharacters.length; offset += 512) {
|
|
172
|
+
const slice = byteCharacters.slice(offset, offset + 512);
|
|
173
|
+
const byteNumbers = new Array(slice.length);
|
|
174
|
+
for (let i = 0; i < slice.length; i++) {
|
|
175
|
+
byteNumbers[i] = slice.charCodeAt(i);
|
|
176
|
+
}
|
|
177
|
+
const byteArray = new Uint8Array(byteNumbers);
|
|
178
|
+
byteArrays.push(byteArray);
|
|
179
|
+
}
|
|
180
|
+
return new Blob(byteArrays, { type: contentType });
|
|
181
|
+
}
|
|
182
|
+
throw new Error();
|
|
183
|
+
};
|
|
184
|
+
/**
|
|
185
|
+
* useImageUploader
|
|
186
|
+
*
|
|
187
|
+
* @description Hook for uploading an image
|
|
188
|
+
* @param {Function} uploadImage - function for uploading an image
|
|
189
|
+
* @param {boolean} loading - loading state
|
|
190
|
+
* @returns {object} uploadImage - function for uploading an image, loading - loading state
|
|
191
|
+
*/
|
|
192
|
+
const useImageUploader = () => {
|
|
193
|
+
const { token } = useToken();
|
|
194
|
+
const [loading, setLoading] = useState(false);
|
|
195
|
+
const uploadImage = useCallback(({ postUrl, base64Image, type }) => {
|
|
196
|
+
setLoading(true);
|
|
197
|
+
return new Promise((resolve, reject) => {
|
|
198
|
+
const formData = new FormData();
|
|
199
|
+
const blob = base64ToBlob(base64Image);
|
|
200
|
+
formData.append("file", blob, `file.${type}`);
|
|
201
|
+
fetch(postUrl, {
|
|
202
|
+
method: "POST",
|
|
203
|
+
body: formData,
|
|
204
|
+
headers: {
|
|
205
|
+
Authorization: `Bearer ${token}`,
|
|
206
|
+
},
|
|
207
|
+
}).then(response => {
|
|
208
|
+
setLoading(false);
|
|
209
|
+
if (response.status === 413) {
|
|
210
|
+
reject("status 413 - maximumSizeExceeded");
|
|
211
|
+
}
|
|
212
|
+
if (!response.ok) {
|
|
213
|
+
reject("response not OK - saveError");
|
|
214
|
+
}
|
|
215
|
+
resolve(true);
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
}, [token]);
|
|
219
|
+
return {
|
|
220
|
+
uploadImage,
|
|
221
|
+
loading,
|
|
222
|
+
};
|
|
223
|
+
};
|
|
224
|
+
|
|
142
225
|
const OemBrandingContext = createContext(null);
|
|
143
226
|
/**
|
|
144
227
|
* This is a hook to use the IOemBrandingContext.
|
|
@@ -539,30 +622,6 @@ const useToast = () => {
|
|
|
539
622
|
return toastContext;
|
|
540
623
|
};
|
|
541
624
|
|
|
542
|
-
const TokenContext = React.createContext(null);
|
|
543
|
-
/**
|
|
544
|
-
* This is a hook to use the TokenContext.
|
|
545
|
-
*
|
|
546
|
-
* @requires TokenProvider
|
|
547
|
-
* @example
|
|
548
|
-
* import { useToken } from "@trackunit/react-core-hooks";
|
|
549
|
-
* const { token } = useToken();
|
|
550
|
-
* @see {@link ITokenContext}
|
|
551
|
-
*/
|
|
552
|
-
const useToken = () => {
|
|
553
|
-
const context = React.useContext(TokenContext);
|
|
554
|
-
if (!context) {
|
|
555
|
-
throw new Error("useToken must be used within the TokenContext");
|
|
556
|
-
}
|
|
557
|
-
return context;
|
|
558
|
-
};
|
|
559
|
-
/**
|
|
560
|
-
* This is a provider for the TokenContext.
|
|
561
|
-
*/
|
|
562
|
-
const TokenProvider = (props) => {
|
|
563
|
-
return jsx(TokenContext.Provider, Object.assign({}, props));
|
|
564
|
-
};
|
|
565
|
-
|
|
566
625
|
/**
|
|
567
626
|
* Hook for filtering a list of items by text search, client side search in a list.
|
|
568
627
|
*
|
|
@@ -694,4 +753,4 @@ const useCurrentUser = () => {
|
|
|
694
753
|
return context;
|
|
695
754
|
};
|
|
696
755
|
|
|
697
|
-
export { AnalyticsContext, AnalyticsContextProvider, AssetSortingProvider, ConfirmationDialogProvider, CurrentUserPreferenceProvider, CurrentUserProvider, EnvironmentContextProvider, FilterBarProvider, NavigationContextProvider, OemBrandingContextProvider, ToastProvider, TokenProvider, UserSubscriptionProvider, useAnalytics, useAssetRuntime, useAssetSorting, useConfirmationDialog, useCurrentUser, useCurrentUserLanguage, useCurrentUserSystemOfMeasurement, useCurrentUserTimeZonePreference, useCustomerRuntime, useEnvironment, useEventRuntime, useFilterBarContext, useHasAccessTo, useIrisAppId, useIrisAppName, useNavigateInHost, useOemBrandingContext, useSiteRuntime, useTextSearch, useToast, useToken, useUserSubscription };
|
|
756
|
+
export { AnalyticsContext, AnalyticsContextProvider, AssetSortingProvider, ConfirmationDialogProvider, CurrentUserPreferenceProvider, CurrentUserProvider, EnvironmentContextProvider, FilterBarProvider, NavigationContextProvider, OemBrandingContextProvider, ToastProvider, TokenProvider, UserSubscriptionProvider, useAnalytics, useAssetRuntime, useAssetSorting, useConfirmationDialog, useCurrentUser, useCurrentUserLanguage, useCurrentUserSystemOfMeasurement, useCurrentUserTimeZonePreference, useCustomerRuntime, useEnvironment, useEventRuntime, useFilterBarContext, useHasAccessTo, useImageUploader, useIrisAppId, useIrisAppName, useNavigateInHost, useOemBrandingContext, useSiteRuntime, useTextSearch, useToast, useToken, useUserSubscription };
|
package/package.json
CHANGED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export interface UploadedFile {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
__typename?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* useImageUploader
|
|
8
|
+
*
|
|
9
|
+
* @description Hook for uploading an image
|
|
10
|
+
* @param {Function} uploadImage - function for uploading an image
|
|
11
|
+
* @param {boolean} loading - loading state
|
|
12
|
+
* @returns {object} uploadImage - function for uploading an image, loading - loading state
|
|
13
|
+
*/
|
|
14
|
+
export declare const useImageUploader: () => {
|
|
15
|
+
uploadImage: ({ postUrl, base64Image, type }: {
|
|
16
|
+
base64Image: string;
|
|
17
|
+
postUrl: URL;
|
|
18
|
+
type: "jpeg" | "png";
|
|
19
|
+
}) => Promise<unknown>;
|
|
20
|
+
loading: boolean;
|
|
21
|
+
};
|
package/src/index.d.ts
CHANGED
|
@@ -3,6 +3,7 @@ export * from "./assetSorting/AssetSortingProvider";
|
|
|
3
3
|
export * from "./confirmationDialog/ConfirmationDialogProvider";
|
|
4
4
|
export * from "./environment/EnvironmentContextProvider";
|
|
5
5
|
export * from "./filter-bar/FilterBarProvider";
|
|
6
|
+
export * from "./images/useImageUploader";
|
|
6
7
|
export * from "./irisOemApp/IrisOemAppContextProvider";
|
|
7
8
|
export * from "./navigation/NavigationContextProvider";
|
|
8
9
|
export * from "./runtimes/useAssetRuntime";
|