@portnet/ui 5.0.12 → 5.0.14

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.
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.guideApi = void 0;
7
+ const guideApi = axiosInstance => ({
8
+ getGuideByProjectCode: projectCode => axiosInstance.get("/guide/".concat(projectCode)),
9
+ getGuideContent: projectCode => axiosInstance.get("/guide/".concat(projectCode, "/content")),
10
+ getFaqContent: () => axiosInstance.get("/guide/FAQ/content")
11
+ });
12
+ exports.guideApi = guideApi;
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.guideImageService = exports.default = void 0;
7
+ require("core-js/modules/es.promise.js");
8
+ require("core-js/modules/es.string.starts-with.js");
9
+ require("core-js/modules/esnext.iterator.constructor.js");
10
+ require("core-js/modules/esnext.iterator.for-each.js");
11
+ require("core-js/modules/esnext.iterator.map.js");
12
+ require("core-js/modules/web.dom-collections.iterator.js");
13
+ require("core-js/modules/web.url.js");
14
+ require("core-js/modules/web.url.to-json.js");
15
+ require("core-js/modules/web.url-search-params.js");
16
+ class ImageCacheService {
17
+ constructor() {
18
+ this.cache = new Map();
19
+ this.loading = new Map();
20
+ }
21
+ getCacheKey(projectCode, imageOrder) {
22
+ return "".concat(projectCode, "-").concat(imageOrder);
23
+ }
24
+ has(projectCode, imageOrder) {
25
+ return this.cache.has(this.getCacheKey(projectCode, imageOrder));
26
+ }
27
+ get(projectCode, imageOrder) {
28
+ return this.cache.get(this.getCacheKey(projectCode, imageOrder));
29
+ }
30
+ set(projectCode, imageOrder, url) {
31
+ this.cache.set(this.getCacheKey(projectCode, imageOrder), url);
32
+ }
33
+ clear() {
34
+ this.cache.forEach(url => {
35
+ if (url.startsWith("blob:")) URL.revokeObjectURL(url);
36
+ });
37
+ this.cache.clear();
38
+ this.loading.clear();
39
+ }
40
+ delete(projectCode, imageOrder) {
41
+ const key = this.getCacheKey(projectCode, imageOrder);
42
+ const url = this.cache.get(key);
43
+ if (url !== null && url !== void 0 && url.startsWith("blob:")) URL.revokeObjectURL(url);
44
+ this.cache.delete(key);
45
+ this.loading.delete(key);
46
+ }
47
+ }
48
+ const imageCacheService = new ImageCacheService();
49
+ const guideImageService = axiosInstance => ({
50
+ loadGuideImage: async (projectCode, imageOrder) => {
51
+ const key = imageCacheService.getCacheKey(projectCode, imageOrder);
52
+ if (imageCacheService.has(projectCode, imageOrder)) {
53
+ return imageCacheService.get(projectCode, imageOrder);
54
+ }
55
+ if (imageCacheService.loading.has(key)) {
56
+ return imageCacheService.loading.get(key);
57
+ }
58
+ const loadingPromise = (async () => {
59
+ try {
60
+ const response = await axiosInstance.get("/public/getImage/".concat(projectCode, "/").concat(imageOrder), {
61
+ responseType: "blob"
62
+ });
63
+ const imageUrl = URL.createObjectURL(response.data);
64
+ imageCacheService.set(projectCode, imageOrder, imageUrl);
65
+ imageCacheService.loading.delete(key);
66
+ return imageUrl;
67
+ } catch (error) {
68
+ imageCacheService.loading.delete(key);
69
+ throw error;
70
+ }
71
+ })();
72
+ imageCacheService.loading.set(key, loadingPromise);
73
+ return loadingPromise;
74
+ },
75
+ loadGuideImages: async (projectCode, imageOrders) => {
76
+ if (!imageOrders || imageOrders.length === 0) return {};
77
+ const promises = imageOrders.map(async imageOrder => {
78
+ try {
79
+ const url = await guideImageService(axiosInstance).loadGuideImage(projectCode, imageOrder);
80
+ return {
81
+ imageOrder,
82
+ url,
83
+ error: null
84
+ };
85
+ } catch (error) {
86
+ console.error("Failed to load image ".concat(projectCode, "/").concat(imageOrder, ":"), error);
87
+ return {
88
+ imageOrder,
89
+ url: null,
90
+ error: error.message
91
+ };
92
+ }
93
+ });
94
+ const results = await Promise.all(promises);
95
+ const imageMap = {};
96
+ results.forEach(_ref => {
97
+ let {
98
+ imageOrder,
99
+ url,
100
+ error
101
+ } = _ref;
102
+ imageMap[imageOrder] = {
103
+ url,
104
+ error
105
+ };
106
+ });
107
+ return imageMap;
108
+ },
109
+ preloadImages: (projectCode, imageOrders) => {
110
+ if (!imageOrders || imageOrders.length === 0) return;
111
+ imageOrders.forEach(imageOrder => {
112
+ guideImageService(axiosInstance).loadGuideImage(projectCode, imageOrder).catch(() => {});
113
+ });
114
+ },
115
+ clearImageCache: () => imageCacheService.clear(),
116
+ clearImage: (projectCode, imageOrder) => imageCacheService.delete(projectCode, imageOrder)
117
+ });
118
+ exports.guideImageService = guideImageService;
119
+ var _default = exports.default = guideImageService;
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/esnext.iterator.filter.js");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.reclamationApi = void 0;
8
+ require("core-js/modules/es.promise.js");
9
+ require("core-js/modules/es.regexp.exec.js");
10
+ require("core-js/modules/es.string.search.js");
11
+ require("core-js/modules/esnext.iterator.constructor.js");
12
+ require("core-js/modules/esnext.iterator.for-each.js");
13
+ function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
14
+ function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
15
+ function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
16
+ function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
17
+ function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
18
+ const reclamationApi = axiosInstance => ({
19
+ getListReclamationApi: async _ref => {
20
+ let {
21
+ page,
22
+ size,
23
+ search
24
+ } = _ref;
25
+ try {
26
+ const response = await axiosInstance.get("/reclamation/list", {
27
+ params: _objectSpread({
28
+ page,
29
+ size
30
+ }, search ? {
31
+ search
32
+ } : {})
33
+ });
34
+ return response.data.body;
35
+ } catch (error) {
36
+ var _error$response;
37
+ throw (error === null || error === void 0 || (_error$response = error.response) === null || _error$response === void 0 ? void 0 : _error$response.data) || new Error("Impossible de charger les réclamations");
38
+ }
39
+ },
40
+ createReclamationApi: async data => {
41
+ try {
42
+ const formData = new FormData();
43
+ const serviceConcerne = data.service.codigo;
44
+ formData.append("type", data.type);
45
+ formData.append("service", serviceConcerne);
46
+ formData.append("objet", data.objet);
47
+ formData.append("description", data.sujet);
48
+ if (data.files && data.files.length > 0) {
49
+ data.files.forEach(file => {
50
+ formData.append("files", file);
51
+ });
52
+ }
53
+ const response = await axiosInstance.post("/reclamation/create", formData, {
54
+ headers: {
55
+ "Content-Type": "multipart/form-data"
56
+ }
57
+ });
58
+ return response.data.body;
59
+ } catch (error) {
60
+ var _error$response2;
61
+ throw (error === null || error === void 0 || (_error$response2 = error.response) === null || _error$response2 === void 0 ? void 0 : _error$response2.data) || new Error("Impossible de create nouvelle réclamation");
62
+ }
63
+ },
64
+ downloadDocumentApi: async documentGuid => {
65
+ try {
66
+ const response = await axiosInstance.post("/reclamation/download?guid=".concat(documentGuid));
67
+ return response.data.body;
68
+ } catch (error) {
69
+ var _error$response3;
70
+ throw (error === null || error === void 0 || (_error$response3 = error.response) === null || _error$response3 === void 0 ? void 0 : _error$response3.data) || new Error("Impossible de charger les réclamations");
71
+ }
72
+ },
73
+ getListServiceReclamationApi: async () => {
74
+ try {
75
+ const response = await axiosInstance.get("/reclamation/list-service");
76
+ return response.data.body;
77
+ } catch (error) {
78
+ var _error$response4;
79
+ throw (error === null || error === void 0 || (_error$response4 = error.response) === null || _error$response4 === void 0 ? void 0 : _error$response4.data) || new Error("Impossible de charger les réclamations");
80
+ }
81
+ }
82
+ });
83
+ exports.reclamationApi = reclamationApi;
@@ -0,0 +1,118 @@
1
+ {
2
+ "id": "FAQ",
3
+ "name": "Liste des questions fréquentes et réponses sur PortNet",
4
+ "icon": "assignment",
5
+ "sections": [
6
+ {
7
+ "id": "MFA",
8
+ "title": "Introduction à Portnet ID et à l'Authentification Multifacteur (MFA)",
9
+ "paragraphs": [
10
+ { "text": "Qu'est-ce que Portnet ID ?", "isQuestion": true },
11
+ { "text": "Portnet ID est l'application mobile officielle de PORTNET S.A. pour l'authentification à deux facteurs (2FA) ou Multi-Factor Authentication (MFA). Elle est conçue pour sécuriser l'accès aux applications PortNet en générant des codes TOTP (Time-based One-Time Password). Cette application vise à renforcer la sécurité des accès, assurer une traçabilité fiable et simplifier la connexion à votre compte.", "isQuestion": false },
12
+ { "text": "Pourquoi l'authentification MFA via Portnet ID est-elle obligatoire ?", "isQuestion": true },
13
+ { "text": "L'authentification MFA via Portnet ID est obligatoire depuis le 21 juillet 2025. Elle répond aux directives de la DGSSI et permet de renforcer la sécurité des comptes PortNet face au contexte actuel de cyberattaques.", "isQuestion": false },
14
+ { "text": "Qu'est-ce qu'un code TOTP et comment fonctionne-t-il ?", "isQuestion": true },
15
+ { "text": "Un code TOTP est un code temporaire à usage unique généré toutes les 30 secondes par l’application Portnet ID. Basé sur l’heure, il est plus sécurisé qu’un OTP traditionnel.", "isQuestion": false }
16
+ ]
17
+ },
18
+ {
19
+ "id": "INSTALL",
20
+ "title": "Installation et Première Utilisation de Portnet ID",
21
+ "paragraphs": [
22
+ { "text": "Comment installer l'application Portnet ID ?", "isQuestion": true },
23
+ { "text": "Pour installer l'application Portnet ID, ouvrez le Google Play Store (Android) ou l'App Store (iOS), recherchez 'PortnetID' (sans espace), puis appuyez sur 'Installer' ou 'Obtenir'. Accordez les permissions nécessaires, notamment l’accès à la caméra pour le scan du QR code.", "isQuestion": false },
24
+ { "text": "Comment configurer mon compte pour la première fois avec Portnet ID ?", "isQuestion": true },
25
+ { "text": "1. Accédez à portnet.ma et connectez-vous avec votre nom d’utilisateur et mot de passe.", "isQuestion": false },
26
+ { "text": "2. Un QR code s’affichera à l’écran.", "isQuestion": false },
27
+ { "text": "3. Ouvrez l’application Portnet ID sur votre mobile.", "isQuestion": false },
28
+ { "text": "4. Appuyez sur 'Ajouter un compte' ou sur '+', puis sur 'Scanner le QR code'.", "isQuestion": false },
29
+ { "text": "5. Scannez le QR code affiché sur votre ordinateur.", "isQuestion": false },
30
+ { "text": "6. L’application génère immédiatement un code TOTP à 6 chiffres.", "isQuestion": false },
31
+ { "text": "7. Saisissez ce code sur portnet.ma pour finaliser la connexion.", "isQuestion": false },
32
+ { "text": "Note : Vous pouvez aussi recevoir les codes TOTP par email après la configuration initiale.", "isQuestion": false },
33
+ { "text": "Puis-je gérer plusieurs comptes PortNet sur la même application Portnet ID ?", "isQuestion": true },
34
+ { "text": "Oui, Portnet ID permet la gestion multi-comptes. Appuyez sur '+', scannez les QR codes supplémentaires, puis renommez les comptes pour une meilleure organisation (ex : société 1, société 2…).", "isQuestion": false }
35
+ ]
36
+ },
37
+ {
38
+ "id": "ACCOUNTS",
39
+ "title": "Gestion des Comptes Utilisateurs sur PortNet",
40
+ "paragraphs": [
41
+ { "text": "Plusieurs personnes peuvent-elles utiliser le même compte PortNet avec Portnet ID ?", "isQuestion": true },
42
+ { "text": "Non. L’authentification MFA est individuelle et liée au smartphone ayant scanné le QR code.", "isQuestion": false },
43
+ { "text": "Comment ajouter d'autres utilisateurs pour ma société sur PortNet ?", "isQuestion": true },
44
+ { "text": "Pour ajouter des utilisateurs, transmettez les documents via reclamation.portnet.ma :", "isQuestion": false },
45
+ { "text": "- Une demande d'accès signée et cachetée.", "isQuestion": false },
46
+ { "text": "- Une demande explicative sur papier en-tête précisant le profil.", "isQuestion": false },
47
+ { "text": "- Copie du RC (moins de 3 mois).", "isQuestion": false },
48
+ { "text": "- Copie de la CNI de chaque utilisateur.", "isQuestion": false },
49
+ { "text": "L’ajout d’utilisateurs est-il payant ?", "isQuestion": true },
50
+ { "text": "Non, la création d’utilisateurs est gratuite.", "isQuestion": false },
51
+ { "text": "Y a-t-il une limite au nombre d'utilisateurs ?", "isQuestion": true },
52
+ { "text": "Par défaut, jusqu’à 5 utilisateurs. Au-delà, la demande est étudiée au cas par cas.", "isQuestion": false },
53
+ { "text": "L'adresse email doit-elle être liée au nom de domaine de l'entreprise ?", "isQuestion": true },
54
+ { "text": "Il est fortement conseillé d'utiliser une adresse professionnelle. Si ce n’est pas le cas (ex : Gmail), une visio enregistrée sera exigée pour confirmer la demande.", "isQuestion": false },
55
+ { "text": "Que faire si un utilisateur ne fait plus partie de l'entreprise ?", "isQuestion": true },
56
+ { "text": "Vous devez demander la désactivation de son compte PortNet immédiatement.", "isQuestion": false }
57
+ ]
58
+ },
59
+ {
60
+ "id": "PROCURA",
61
+ "title": "Gestion des Procurations (Délégations)",
62
+ "paragraphs": [
63
+ { "text": "Qu'est-ce que le service de Procuration sur PortNet ?", "isQuestion": true },
64
+ { "text": "Il permet aux importateurs/exportateurs d’attribuer des procurations à des transitaires, FF ou transporteurs afin de réaliser des formalités en leur nom.", "isQuestion": false },
65
+ { "text": "Comment attribuer une procuration ?", "isQuestion": true },
66
+ { "text": "Via le menu Paramétrage > Gestion des procurations, recherchez le transitaire, sélectionnez les profils concernés et validez. Le transitaire reçoit un email de confirmation.", "isQuestion": false },
67
+ { "text": "Quelles limitations peuvent être appliquées ?", "isQuestion": true },
68
+ { "text": "Vous pouvez définir une date limite ou un nombre maximum de dossiers.", "isQuestion": false },
69
+ { "text": "Comment sont gérées les limitations ?", "isQuestion": true },
70
+ { "text": "Le système indique si la procuration est expirée, et déduit le nombre de dossiers à mesure qu’ils sont traités.", "isQuestion": false },
71
+ { "text": "Quelles opérations peuvent être effectuées avec une procuration ?", "isQuestion": true },
72
+ { "text": "TI, LE, rendez-vous TCs import, préavis export, ANRT, DFD, COC, demandes d’instruments de mesure…", "isQuestion": false },
73
+ { "text": "Différence entre procuration PortNet et procuration Douane ?", "isQuestion": true },
74
+ { "text": "La procuration PortNet est interne au Guichet Unique. La procuration Douane est un document distinct soumis via PortNet et utilisé pour BADR.", "isQuestion": false }
75
+ ]
76
+ },
77
+ {
78
+ "id": "TROUBLESHOOT",
79
+ "title": "Dépannage des Problèmes Courants",
80
+ "paragraphs": [
81
+ { "text": "Le QR code ne s'affiche pas.", "isQuestion": true },
82
+ { "text": "Cela signifie qu’il a déjà été scanné. Demandez une réinitialisation via reclamation.portnet.ma.", "isQuestion": false },
83
+ { "text": "Le code TOTP est invalide.", "isQuestion": true },
84
+ { "text": "- Vérifiez l’heure du téléphone (synchronisation automatique).", "isQuestion": false },
85
+ { "text": "- Attendez le prochain code (validité 30 secondes).", "isQuestion": false },
86
+ { "text": "- Réinstallez l’application si nécessaire.", "isQuestion": false },
87
+ { "text": "L'application ne se lance pas.", "isQuestion": true },
88
+ { "text": "Redémarrez le téléphone, videz le cache, libérez de l’espace, ou réinstallez l'application.", "isQuestion": false },
89
+ { "text": "Impossible de scanner un QR code.", "isQuestion": true },
90
+ { "text": "Vérifiez les permissions caméra, améliorez l’éclairage, ajustez la distance, nettoyez l’écran.", "isQuestion": false },
91
+ { "text": "Que faire en cas de perte ou vol du téléphone ?", "isQuestion": true },
92
+ { "text": "- Changez le mot de passe PortNet.", "isQuestion": false },
93
+ { "text": "- Demandez une réinitialisation du QR code.", "isQuestion": false },
94
+ { "text": "- Reconfigurez Portnet ID sur le nouveau téléphone.", "isQuestion": false }
95
+ ]
96
+ },
97
+ {
98
+ "id": "SECURITY",
99
+ "title": "Sécurité et Bonnes Pratiques",
100
+ "paragraphs": [
101
+ { "text": "Activez un verrouillage d'écran sur votre smartphone et gardez-le à jour.", "isQuestion": false },
102
+ { "text": "Téléchargez l’application uniquement depuis les stores officiels.", "isQuestion": false },
103
+ { "text": "Ne partagez jamais vos codes TOTP et ne faites pas de captures d’écran.", "isQuestion": false },
104
+ { "text": "Utilisez les codes rapidement et assurez-vous que l’heure de votre téléphone est correcte.", "isQuestion": false }
105
+ ]
106
+ },
107
+ {
108
+ "id": "SUPPORT",
109
+ "title": "Support et Ressources",
110
+ "paragraphs": [
111
+ { "text": "Où obtenir de l'aide ?", "isQuestion": true },
112
+ { "text": "Via reclamation.portnet.ma ou par téléphone au 05 20 47 31 00.", "isQuestion": false },
113
+ { "text": "Où trouver les guides et documents utiles ?", "isQuestion": true },
114
+ { "text": "Les guides utilisateurs et documents sont disponibles sur le portail PortNet, dans le menu Assistance > Ressources > Guide utilisateur.", "isQuestion": false }
115
+ ]
116
+ }
117
+ ]
118
+ }
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.default = void 0;
7
+ var _FAQ = _interopRequireDefault(require("./FAQ.json"));
8
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
9
+ var _default = exports.default = {
10
+ "FAQ": _FAQ.default
11
+ };
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.useHelpWidget = exports.default = void 0;
7
+ var _react = require("react");
8
+ const PuiHelpWidgetContext = /*#__PURE__*/(0, _react.createContext)(null);
9
+ const useHelpWidget = () => {
10
+ const context = (0, _react.useContext)(PuiHelpWidgetContext);
11
+ if (!context) {
12
+ throw new Error("useHelpWidget must be used inside PuiHelpWidgetProvider");
13
+ }
14
+ return context;
15
+ };
16
+ exports.useHelpWidget = useHelpWidget;
17
+ var _default = exports.default = PuiHelpWidgetContext;
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+
3
+ require("core-js/modules/es.weak-map.js");
4
+ require("core-js/modules/web.dom-collections.iterator.js");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.default = void 0;
9
+ require("core-js/modules/es.promise.js");
10
+ var _react = _interopRequireWildcard(require("react"));
11
+ var _axios = _interopRequireDefault(require("axios"));
12
+ var _reactRedux = require("react-redux");
13
+ var _toolkit = require("@reduxjs/toolkit");
14
+ var _reactQuery = require("react-query");
15
+ var _reclamationApi = require("../../api/reclamationApi");
16
+ var _guideApi = require("../../api/guideApi");
17
+ var _PuiHelpWidgetContext = _interopRequireDefault(require("../common/PuiHelpWidgetContext"));
18
+ var _PuiHelpWidget = _interopRequireDefault(require("../widgets/PuiHelpWidget"));
19
+ var _guideImageService = _interopRequireDefault(require("../../api/guideImageService"));
20
+ var _jsxRuntime = require("react/jsx-runtime");
21
+ function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
22
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
23
+ const widgetStore = (0, _toolkit.configureStore)({
24
+ reducer: {}
25
+ });
26
+ const widgetQueryClient = new _reactQuery.QueryClient();
27
+ const PuiHelpWidgetProvider = _ref => {
28
+ let {
29
+ baseURL,
30
+ tijariaUrl,
31
+ apiAuthUrl,
32
+ guideBaseUrl,
33
+ token,
34
+ showReclamation = true,
35
+ showGuides = true,
36
+ currentProjectCode = null,
37
+ children
38
+ } = _ref;
39
+ const axiosInstance = (0, _react.useMemo)(() => {
40
+ const instance = _axios.default.create({
41
+ baseURL
42
+ });
43
+ instance.interceptors.request.use(config => {
44
+ config.headers.Authorization = "Bearer ".concat(token);
45
+ return config;
46
+ });
47
+ instance.interceptors.response.use(res => res, err => {
48
+ var _err$response;
49
+ if (((_err$response = err.response) === null || _err$response === void 0 ? void 0 : _err$response.status) === 401) {
50
+ console.error("Session expired");
51
+ }
52
+ return Promise.reject(err);
53
+ });
54
+ return instance;
55
+ }, [baseURL, token]);
56
+ const publicAxiosInstance = (0, _react.useMemo)(() => {
57
+ return _axios.default.create({
58
+ baseURL
59
+ });
60
+ }, [baseURL]);
61
+ const value = {
62
+ reclamationApi: (0, _reclamationApi.reclamationApi)(axiosInstance),
63
+ guideApi: (0, _guideApi.guideApi)(axiosInstance),
64
+ guideImageService: (0, _guideImageService.default)(publicAxiosInstance),
65
+ tijariaUrl,
66
+ apiAuthUrl,
67
+ token
68
+ };
69
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactRedux.Provider, {
70
+ store: widgetStore,
71
+ children: /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactQuery.QueryClientProvider, {
72
+ client: widgetQueryClient,
73
+ children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_PuiHelpWidgetContext.default.Provider, {
74
+ value: value,
75
+ children: [children, /*#__PURE__*/(0, _jsxRuntime.jsx)(_PuiHelpWidget.default, {
76
+ showReclamation: showReclamation,
77
+ showGuides: showGuides,
78
+ currentProjectCode: currentProjectCode,
79
+ guideBaseUrl: guideBaseUrl
80
+ })]
81
+ })
82
+ })
83
+ });
84
+ };
85
+ var _default = exports.default = PuiHelpWidgetProvider;