@progressive-development/pd-spa-helper 0.7.5 → 0.8.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.
Files changed (173) hide show
  1. package/dist/PdSpaHelper.d.ts +13 -18
  2. package/dist/PdSpaHelper.d.ts.map +1 -1
  3. package/dist/_virtual/_commonjsHelpers.js +6 -0
  4. package/dist/_virtual/hammer.js +4 -0
  5. package/dist/defaultpage/default-confirm-popup.d.ts.map +1 -1
  6. package/dist/defaultpage/default-dialog-popup.d.ts.map +1 -1
  7. package/dist/defaultpage/default-login.d.ts.map +1 -1
  8. package/dist/defaultpage/default-popup.d.ts.map +1 -1
  9. package/dist/defaultpage/default-step-address.d.ts.map +1 -1
  10. package/dist/defaultpage/default-step-summary.d.ts.map +1 -1
  11. package/dist/defaultpage/default-view-page.d.ts.map +1 -1
  12. package/dist/defaultpage/default-wizard-step.d.ts.map +1 -1
  13. package/dist/defaultpage/default-wizard.d.ts.map +1 -1
  14. package/dist/generated/locale-codes.d.ts.map +1 -1
  15. package/dist/generated/locale-wrapper/be-wrapper.d.ts +54 -13
  16. package/dist/generated/locale-wrapper/be-wrapper.d.ts.map +1 -1
  17. package/dist/generated/locale-wrapper/de-wrapper.d.ts +54 -13
  18. package/dist/generated/locale-wrapper/de-wrapper.d.ts.map +1 -1
  19. package/dist/generated/locale-wrapper/en-wrapper.d.ts +54 -13
  20. package/dist/generated/locale-wrapper/en-wrapper.d.ts.map +1 -1
  21. package/dist/generated/locales/be.d.ts +13 -13
  22. package/dist/generated/locales/be.d.ts.map +1 -1
  23. package/dist/generated/locales/de.d.ts +13 -13
  24. package/dist/generated/locales/de.d.ts.map +1 -1
  25. package/dist/generated/locales/en.d.ts +13 -13
  26. package/dist/generated/locales/en.d.ts.map +1 -1
  27. package/dist/helper/blob-helper.d.ts +3 -0
  28. package/dist/helper/blob-helper.d.ts.map +1 -0
  29. package/dist/helper/date-helper.d.ts +27 -0
  30. package/dist/helper/date-helper.d.ts.map +1 -0
  31. package/dist/helper/locale-format.d.ts +4 -0
  32. package/dist/helper/locale-format.d.ts.map +1 -0
  33. package/dist/helper/number-helper.d.ts +2 -0
  34. package/dist/helper/number-helper.d.ts.map +1 -0
  35. package/dist/helper/offline-watcher-helper.d.ts +3 -0
  36. package/dist/helper/offline-watcher-helper.d.ts.map +1 -0
  37. package/dist/helper/price-helper.d.ts +5 -0
  38. package/dist/helper/price-helper.d.ts.map +1 -0
  39. package/dist/helper/refresh-id-token.d.ts.map +1 -1
  40. package/dist/helper/text-helper.d.ts +3 -0
  41. package/dist/helper/text-helper.d.ts.map +1 -0
  42. package/dist/index.d.ts +8 -4
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/index.js +23 -11
  45. package/dist/model/spa-model.d.ts +1 -0
  46. package/dist/model/spa-model.d.ts.map +1 -1
  47. package/dist/node_modules/@progressive-development/pd-content/dist/locales/be.js +7 -0
  48. package/dist/node_modules/@progressive-development/pd-content/dist/locales/de.js +7 -0
  49. package/dist/node_modules/@progressive-development/pd-content/dist/locales/en.js +7 -0
  50. package/dist/{src/router/AppMain.js → node_modules/@progressive-development/pd-content/dist/pd-box-view.js} +18 -7
  51. package/dist/node_modules/@progressive-development/pd-content/dist/pd-collapse.js +152 -0
  52. package/dist/node_modules/@progressive-development/pd-content/dist/pd-edit-content.js +225 -0
  53. package/dist/node_modules/@progressive-development/pd-content/dist/pd-more-info.js +84 -0
  54. package/dist/{pd-panel-viewer.js → node_modules/@progressive-development/pd-content/dist/pd-panel-viewer.js} +95 -75
  55. package/dist/{pd-panel.js → node_modules/@progressive-development/pd-content/dist/pd-panel.js} +21 -21
  56. package/dist/node_modules/@progressive-development/pd-content/dist/pd-resize-content.js +64 -0
  57. package/dist/node_modules/@progressive-development/pd-shared-styles/{src/shared-color-styles.js → dist/src/pd-color-styles.js} +13 -14
  58. package/dist/node_modules/@progressive-development/pd-shared-styles/dist/src/pd-font-styles.js +25 -0
  59. package/dist/node_modules/hammerjs/hammer.js +1797 -0
  60. package/dist/node_modules/universal-router/path-to-regexp.js +260 -0
  61. package/dist/node_modules/universal-router/universal-router.js +135 -0
  62. package/dist/popup/wizard-close-popup.d.ts.map +1 -1
  63. package/dist/popup/wizard-reload-popup.d.ts.map +1 -1
  64. package/dist/router/PdRouterService.d.ts +28 -0
  65. package/dist/router/PdRouterService.d.ts.map +1 -0
  66. package/dist/router/rout-types.d.ts +17 -0
  67. package/dist/router/rout-types.d.ts.map +1 -0
  68. package/dist/service-provider/firebase/auth.d.ts +2 -2
  69. package/dist/service-provider/firebase/auth.d.ts.map +1 -1
  70. package/dist/service-provider/firebase/firestorage-client.d.ts.map +1 -1
  71. package/dist/service-provider/firebase/firestore-client.d.ts +1 -1
  72. package/dist/service-provider/firebase/firestore-client.d.ts.map +1 -1
  73. package/dist/service-provider/firebase/functions-client.d.ts.map +1 -1
  74. package/dist/service-provider/firebase/messagingFirebaseClient.d.ts.map +1 -1
  75. package/dist/service-provider/mock/auth.d.ts +1 -1
  76. package/dist/service-provider/mock/auth.d.ts.map +1 -1
  77. package/dist/service-provider/mock/function-client.d.ts +1 -3
  78. package/dist/service-provider/mock/function-client.d.ts.map +1 -1
  79. package/dist/service-provider/mock/storage-client.d.ts.map +1 -1
  80. package/dist/service-provider/service-provider-impl.d.ts +2 -4
  81. package/dist/service-provider/service-provider-impl.d.ts.map +1 -1
  82. package/dist/service-provider/service-provider-model.d.ts +7 -8
  83. package/dist/service-provider/service-provider-model.d.ts.map +1 -1
  84. package/dist/src/PdSpaHelper.js +190 -189
  85. package/dist/src/defaultpage/default-confirm-popup.js +7 -7
  86. package/dist/src/defaultpage/default-dialog-popup.js +16 -18
  87. package/dist/src/defaultpage/default-login.js +4 -6
  88. package/dist/src/defaultpage/default-popup.js +1 -3
  89. package/dist/src/defaultpage/default-step-address.js +5 -7
  90. package/dist/src/defaultpage/default-step-summary.js +8 -6
  91. package/dist/src/defaultpage/default-view-page.js +0 -2
  92. package/dist/src/defaultpage/default-wizard-step.js +6 -8
  93. package/dist/src/defaultpage/default-wizard.js +34 -14
  94. package/dist/src/generated/locale-wrapper/be-wrapper.js +18 -11
  95. package/dist/src/generated/locale-wrapper/de-wrapper.js +18 -11
  96. package/dist/src/generated/locale-wrapper/en-wrapper.js +18 -11
  97. package/dist/src/helper/blob-helper.js +37 -0
  98. package/dist/src/helper/date-helper.js +137 -0
  99. package/dist/src/helper/locale-format.js +19 -0
  100. package/dist/src/helper/number-helper.js +14 -0
  101. package/dist/src/helper/{helper-utils.js → offline-watcher-helper.js} +1 -17
  102. package/dist/src/helper/price-helper.js +25 -0
  103. package/dist/src/helper/refresh-id-token.js +3 -1
  104. package/dist/src/helper/text-helper.js +6 -0
  105. package/dist/src/model/spa-model.js +3 -1
  106. package/dist/src/popup/wizard-close-popup.js +11 -5
  107. package/dist/src/popup/wizard-reload-popup.js +9 -6
  108. package/dist/src/router/PdRouterService.js +112 -0
  109. package/dist/src/service-provider/firebase/firestorage-client.js +33 -12
  110. package/dist/src/service-provider/firebase/firestore-client.js +7 -5
  111. package/dist/src/service-provider/firebase/functions-client.js +11 -9
  112. package/dist/src/service-provider/firebase/messagingFirebaseClient.js +9 -10
  113. package/dist/src/service-provider/mock/storage-client.js +21 -9
  114. package/dist/src/service-provider/service-provider-impl.js +19 -18
  115. package/dist/src/store/spa-app-actions.js +32 -8
  116. package/dist/src/store/spa-app-effects.js +19 -15
  117. package/dist/src/store/spa-app-reducer.js +5 -9
  118. package/dist/src/tmpown/pd-loading-state.js +60 -43
  119. package/dist/src/tmpown/pd-login.js +58 -45
  120. package/dist/src/tmpown/pd-toast.js +23 -20
  121. package/dist/store/indexDB.d.ts.map +1 -1
  122. package/dist/store/mini-rx.store.d.ts.map +1 -1
  123. package/dist/store/spa-app-actions.d.ts +2 -2
  124. package/dist/store/spa-app-actions.d.ts.map +1 -1
  125. package/dist/store/spa-app-effects.d.ts +2 -2
  126. package/dist/store/spa-app-effects.d.ts.map +1 -1
  127. package/dist/store/spa-app-reducer.d.ts.map +1 -1
  128. package/dist/store/spa-app-selector.d.ts.map +1 -1
  129. package/dist/stories/address-edit.stories.d.ts +1 -1
  130. package/dist/stories/address-edit.stories.d.ts.map +1 -1
  131. package/dist/stories/address-new.stories.d.ts +1 -1
  132. package/dist/stories/address-new.stories.d.ts.map +1 -1
  133. package/dist/stories/pd-loading-state.stories.d.ts +1 -1
  134. package/dist/stories/pd-loading-state.stories.d.ts.map +1 -1
  135. package/dist/stories/pd-toast.stories.d.ts +1 -1
  136. package/dist/stories/pd-toast.stories.d.ts.map +1 -1
  137. package/dist/stories/routing.stories.d.ts +24 -0
  138. package/dist/stories/routing.stories.d.ts.map +1 -0
  139. package/dist/stories/test-impls/test-mock-app.d.ts +15 -0
  140. package/dist/stories/test-impls/test-mock-app.d.ts.map +1 -0
  141. package/dist/stories/test-impls/test-pages/test-home-page.d.ts +7 -0
  142. package/dist/stories/test-impls/test-pages/test-home-page.d.ts.map +1 -0
  143. package/dist/stories/test-impls/test-pages/test-not-found-page.d.ts +5 -0
  144. package/dist/stories/test-impls/test-pages/test-not-found-page.d.ts.map +1 -0
  145. package/dist/tmpown/pd-loading-state.d.ts.map +1 -1
  146. package/dist/tmpown/pd-login.d.ts.map +1 -1
  147. package/dist/tmpown/pd-toast.d.ts.map +1 -1
  148. package/package.json +42 -79
  149. package/dist/helper/helper-utils.d.ts +0 -6
  150. package/dist/helper/helper-utils.d.ts.map +0 -1
  151. package/dist/node_modules/@progressive-development/pd-shared-styles/src/shared-font-styles.js +0 -32
  152. package/dist/pd-icon-panel-button.d.ts +0 -2
  153. package/dist/pd-icon-panel-button.js +0 -231
  154. package/dist/pd-panel-viewer.d.ts +0 -2
  155. package/dist/pd-panel.d.ts +0 -2
  156. package/dist/pd-tab.d.ts +0 -2
  157. package/dist/pd-tab.js +0 -146
  158. package/dist/router/AppMain.d.ts +0 -7
  159. package/dist/router/AppMain.d.ts.map +0 -1
  160. package/dist/service-call-controller2.d.ts +0 -17
  161. package/dist/service-call-controller2.d.ts.map +0 -1
  162. package/dist/stories/pd-icon-button.stories.d.ts +0 -30
  163. package/dist/stories/pd-icon-button.stories.d.ts.map +0 -1
  164. package/dist/tmpown/pd-icon-panel-button.d.ts +0 -17
  165. package/dist/tmpown/pd-icon-panel-button.d.ts.map +0 -1
  166. package/dist/tmpown/pd-panel-viewer.d.ts +0 -17
  167. package/dist/tmpown/pd-panel-viewer.d.ts.map +0 -1
  168. package/dist/tmpown/pd-panel.d.ts +0 -6
  169. package/dist/tmpown/pd-panel.d.ts.map +0 -1
  170. package/dist/tmpown/pd-tab.d.ts +0 -19
  171. package/dist/tmpown/pd-tab.d.ts.map +0 -1
  172. package/dist/tmpown/pd-tab.stories.d.ts +0 -23
  173. package/dist/tmpown/pd-tab.stories.d.ts.map +0 -1
@@ -0,0 +1,25 @@
1
+ import { getCurrentFormatLocale } from "./locale-format.js";
2
+ import { isValidNumber } from "./number-helper.js";
3
+ const EURO_FORMAT = (locale = getCurrentFormatLocale()) => Intl.NumberFormat(locale, {
4
+ style: "currency",
5
+ currency: "EUR"
6
+ });
7
+ const replaceForPriceFormat = (numberString) => numberString == null ? void 0 : numberString.replaceAll(",", ".");
8
+ const formatToPrice = (price) => {
9
+ let resultStr = "-- €";
10
+ if (price) {
11
+ resultStr = EURO_FORMAT().format(price);
12
+ }
13
+ return resultStr;
14
+ };
15
+ const toValidNumberOrUndefined = (numberStr) => {
16
+ const replacedNumber = replaceForPriceFormat(numberStr);
17
+ const replacedNumberFixed = isValidNumber(replacedNumber) ? Number(replacedNumber).toFixed(2) : void 0;
18
+ return replacedNumberFixed ? Number(replacedNumberFixed) : void 0;
19
+ };
20
+ export {
21
+ EURO_FORMAT,
22
+ formatToPrice,
23
+ replaceForPriceFormat,
24
+ toValidNumberOrUndefined
25
+ };
@@ -13,7 +13,9 @@ const refreshAndPersistUserIdToken = async () => {
13
13
  userNameToken: userName,
14
14
  userIdToken: userToken
15
15
  });
16
- console.log(`[TokenRefresh] ID Token refreshed & saved to local DB for app: ${appName}`);
16
+ console.log(
17
+ `[TokenRefresh] ID Token refreshed & saved to local DB for app: ${appName}`
18
+ );
17
19
  return true;
18
20
  } catch (error) {
19
21
  console.error(`[TokenRefresh] Failed to refresh and persist token:`, error);
@@ -0,0 +1,6 @@
1
+ const isEmpty = (field) => !field || field === "";
2
+ const isBlank = (field) => !field || isEmpty(field.trim());
3
+ export {
4
+ isBlank,
5
+ isEmpty
6
+ };
@@ -1,6 +1,8 @@
1
1
  const APP_CONF_EVENT = "get-app-conf";
2
2
  const RUNNING_WIZARD_STORAGE_ELEMENTS = "pd.spa.local.wizard.storage";
3
+ const UNDEF = "UNDEF";
3
4
  export {
4
5
  APP_CONF_EVENT,
5
- RUNNING_WIZARD_STORAGE_ELEMENTS
6
+ RUNNING_WIZARD_STORAGE_ELEMENTS,
7
+ UNDEF
6
8
  };
@@ -17,7 +17,9 @@ let WizardClosePopup = class extends DefaultConfirmPopup {
17
17
  super(...arguments);
18
18
  this._singleButton = false;
19
19
  this._type = "warn";
20
- this._popupTitle = msg("Bearbeitung abbrechen", { id: "spaH.wizard.close.popup.title" });
20
+ this._popupTitle = msg("Bearbeitung abbrechen", {
21
+ id: "spaH.wizard.close.popup.title"
22
+ });
21
23
  this.withStorage = false;
22
24
  }
23
25
  // eslint-disable-next-line class-methods-use-this
@@ -25,16 +27,21 @@ let WizardClosePopup = class extends DefaultConfirmPopup {
25
27
  return html`
26
28
  <div class="popup-content" slot="content">
27
29
  <p>
28
- ${this.withStorage ? msg("Die aktuellen Eingaben können für eine spätere Bearbeitung gespeichert oder verworfen werden. Welche Aktion soll ausgeführt werden?", { id: "spaH.wizard.close.popup.storage.content" }) : msg("Die aktuellen Eingaben gehen nach dem Schließen unwiderruflich verloren. Dennoch schließen?", { id: "spaH.wizard.reload.popup.noStorage.content" })}
30
+ ${this.withStorage ? msg(
31
+ "Die aktuellen Eingaben können für eine spätere Bearbeitung gespeichert oder verworfen werden. Welche Aktion soll ausgeführt werden?",
32
+ { id: "spaH.wizard.close.popup.storage.content" }
33
+ ) : msg(
34
+ "Die aktuellen Eingaben gehen nach dem Schließen unwiderruflich verloren. Dennoch schließen?",
35
+ { id: "spaH.wizard.reload.popup.noStorage.content" }
36
+ )}
29
37
  </p>
30
- </div>
38
+ </div>
31
39
  `;
32
40
  }
33
41
  };
34
42
  WizardClosePopup.styles = [
35
43
  DefaultConfirmPopup.styles,
36
44
  css`
37
-
38
45
  :host {
39
46
  --pd-popup-max-width: 80%;
40
47
  }
@@ -43,7 +50,6 @@ WizardClosePopup.styles = [
43
50
  display: flex;
44
51
  flex-direction: column;
45
52
  }
46
-
47
53
  `
48
54
  ];
49
55
  __decorateClass([
@@ -17,26 +17,30 @@ let WizardReloadPopup = class extends DefaultConfirmPopup {
17
17
  super(...arguments);
18
18
  this._singleButton = false;
19
19
  this._type = "info";
20
- this._popupTitle = msg("Bearbeitung fortsetzen?", { id: "spaH.wizard.reload.popup.title" });
20
+ this._popupTitle = msg("Bearbeitung fortsetzen?", {
21
+ id: "spaH.wizard.reload.popup.title"
22
+ });
21
23
  }
22
24
  // eslint-disable-next-line class-methods-use-this
23
25
  _renderContent() {
24
26
  return html`
25
27
  <div class="popup-content" slot="content">
26
28
  <p>
27
- ${msg("Für dieses Formular wurden bereits Daten gespeichert. Soll die Bearbeitung fortgesetzt, oder eine neue Dateneingabe gestartet werden? Bei einer neuen Eingabe werden die bisherigen Daten verworfen.", { id: "spaH.wizard.reload.popup.content" })}
29
+ ${msg(
30
+ "Für dieses Formular wurden bereits Daten gespeichert. Soll die Bearbeitung fortgesetzt, oder eine neue Dateneingabe gestartet werden? Bei einer neuen Eingabe werden die bisherigen Daten verworfen.",
31
+ { id: "spaH.wizard.reload.popup.content" }
32
+ )}
28
33
  </p>
29
34
  <div class="last-modified">
30
35
  Letzte Bearbeitung: <span>${this.reloadItem.timestamp}</span>
31
36
  </div>
32
- </div>
37
+ </div>
33
38
  `;
34
39
  }
35
40
  };
36
41
  WizardReloadPopup.styles = [
37
42
  DefaultConfirmPopup.styles,
38
43
  css`
39
-
40
44
  :host {
41
45
  --pd-popup-max-width: 80%;
42
46
  }
@@ -56,10 +60,9 @@ WizardReloadPopup.styles = [
56
60
  }
57
61
 
58
62
  .last-modified::before {
59
- content: '🕒';
63
+ content: "🕒";
60
64
  margin-right: 6px;
61
65
  }
62
-
63
66
  `
64
67
  ];
65
68
  __decorateClass([
@@ -0,0 +1,112 @@
1
+ import UniversalRouter from "../../node_modules/universal-router/universal-router.js";
2
+ class PdRouterService {
3
+ constructor() {
4
+ this.router = null;
5
+ this.onChangeHandlers = [];
6
+ this.currentRoute = "";
7
+ this.isAuthenticatedWithSessionRedirect = async () => true;
8
+ window.addEventListener("popstate", () => {
9
+ this.resolve(location.pathname + location.search);
10
+ });
11
+ }
12
+ // Default-Fallback, falls nicht überschrieben
13
+ /**
14
+ * Setzt die Routen-Konfiguration. Muss vor Verwendung von navigate() aufgerufen werden.
15
+ */
16
+ configureRoutes(definitions) {
17
+ console.log(
18
+ "############ CONFIGURE ROUTING SERVICE ##################",
19
+ definitions
20
+ );
21
+ definitions.forEach((def) => {
22
+ console.log(`[ROUTING] ${def.name}:`);
23
+ (Array.isArray(def.pattern) ? def.pattern : [def.pattern]).forEach(
24
+ (p, idx) => {
25
+ console.log(
26
+ ` Pattern[${idx}]: "${p}" | Codes: ${[...p].map((c) => c.charCodeAt(0)).join(", ")}`
27
+ );
28
+ }
29
+ );
30
+ });
31
+ const universalRoutes = definitions.flatMap((def) => {
32
+ const patterns = Array.isArray(def.pattern) ? def.pattern : [def.pattern];
33
+ return patterns.map((pattern) => ({
34
+ path: pattern,
35
+ action: async (context) => {
36
+ if (def.auth && !await this.isAuthenticatedWithSessionRedirect(def.name)) {
37
+ const fallbackRoute = def.authFallback ?? "login";
38
+ return { route: fallbackRoute };
39
+ }
40
+ if (def.action) {
41
+ const result = await def.action();
42
+ if (result && typeof result === "object" && result.route) {
43
+ return { ...result, params: context.params };
44
+ }
45
+ }
46
+ return {
47
+ route: def.name,
48
+ params: context.params
49
+ };
50
+ }
51
+ }));
52
+ });
53
+ this.router = new UniversalRouter(universalRoutes);
54
+ this.resolve(location.pathname + location.search);
55
+ }
56
+ /**
57
+ * Navigiert zu einer neuen Route und triggert resolve()
58
+ */
59
+ async navigate(path, force = false) {
60
+ const fullPath = new URL(path, window.location.origin).pathname + new URL(path, window.location.origin).search;
61
+ const current = window.location.pathname + window.location.search;
62
+ if (!force && current === fullPath) {
63
+ console.debug("[PdRouter] Navigation skipped (same path):", path);
64
+ return;
65
+ }
66
+ history.pushState({}, "", path);
67
+ await this.resolve(path);
68
+ }
69
+ /**
70
+ * Registriert einen Callback, der bei jeder Routenänderung aufgerufen wird
71
+ */
72
+ onRouteChange(handler) {
73
+ this.onChangeHandlers.push(handler);
74
+ }
75
+ /**
76
+ * Interne Methode zum Auflösen einer Route und Benachrichtigen aller Listener
77
+ */
78
+ async resolve(path) {
79
+ if (!this.router) {
80
+ console.warn("[PdRouter] Router not yet configured");
81
+ return;
82
+ }
83
+ const url = new URL(path, window.location.origin);
84
+ const pathname = url.pathname;
85
+ const query = Object.fromEntries(url.searchParams.entries());
86
+ try {
87
+ console.log(
88
+ "[PdRouter] bevore resolve Current location:",
89
+ location.pathname
90
+ );
91
+ const result = await this.router.resolve({ pathname });
92
+ if (!result || typeof result !== "object" || !result.route) {
93
+ console.warn("[PdRouter] Invalid route result:", result);
94
+ return;
95
+ }
96
+ const routeInfo = {
97
+ route: result.route,
98
+ path: pathname,
99
+ params: result.params ?? {},
100
+ query
101
+ };
102
+ this.currentRoute = routeInfo.route;
103
+ this.onChangeHandlers.forEach((fn) => fn(routeInfo));
104
+ } catch (err) {
105
+ console.error("[PdRouter] Routing error:", err);
106
+ }
107
+ }
108
+ }
109
+ const pdRouterService = new PdRouterService();
110
+ export {
111
+ pdRouterService
112
+ };
@@ -44,19 +44,26 @@ const uploadFirestorageFile = (file) => {
44
44
  throw new Error(`Invalid storage name: ${storageName || DEFAULT_STORAGE}`);
45
45
  }
46
46
  if (!storageConf2.references || storageConf2.references.length === 0) {
47
- throw new Error(`No references configured for storage: ${storageName || DEFAULT_STORAGE}`);
47
+ throw new Error(
48
+ `No references configured for storage: ${storageName || DEFAULT_STORAGE}`
49
+ );
48
50
  }
49
- const uploadRefConf = referenceKey ? storageConf2.references.filter((filterRef) => filterRef.key === referenceKey)[0] : storageConf2.references[0];
51
+ const uploadRefConf = referenceKey ? storageConf2.references.filter(
52
+ (filterRef) => filterRef.key === referenceKey
53
+ )[0] : storageConf2.references[0];
50
54
  if (!uploadRefConf || !uploadRefConf.storageRef) {
51
55
  throw new Error(`No valid reference for key: ${referenceKey}`);
52
56
  }
53
- const fileRef = ref(uploadRefConf.storageRef, subFolderName ? `${subFolderName}/${fileName}` : fileName);
57
+ const fileRef = ref(
58
+ uploadRefConf.storageRef,
59
+ subFolderName ? `${subFolderName}/${fileName}` : fileName
60
+ );
54
61
  const metadata = {
55
62
  customMetadata: {
56
- "creator": (_a = getUser()) == null ? void 0 : _a.displayName,
57
- "comment": file.description,
58
- "name": file.descriptionName,
59
- "readonly": file.readonly ? "true" : "false"
63
+ creator: (_a = getUser()) == null ? void 0 : _a.displayName,
64
+ comment: file.description,
65
+ name: file.descriptionName,
66
+ readonly: file.readonly ? "true" : "false"
60
67
  }
61
68
  };
62
69
  return uploadString(fileRef, file.base64DataURL, "data_url", metadata);
@@ -112,7 +119,9 @@ const fetchItemsAndFolders = async (usedRef, storageName, refKey, includeMetaDat
112
119
  }
113
120
  if (includeMetaData) {
114
121
  const metaResults = await Promise.all(metaPromises);
115
- return itemRefs.map((item, index) => processMetadata(item, metaResults[index]));
122
+ return itemRefs.map(
123
+ (item, index) => processMetadata(item, metaResults[index])
124
+ );
116
125
  }
117
126
  return itemRefs;
118
127
  } catch (error) {
@@ -166,14 +175,26 @@ const getFirestorageFileList = (storageName, refKey, subFolder, includeMetaData)
166
175
  throw new Error(`Invalid storage name: ${storageName}`);
167
176
  }
168
177
  if (!storageConf2.references || storageConf2.references.length === 0) {
169
- throw new Error(`No references configured for storage: ${storageName || DEFAULT_STORAGE}`);
178
+ throw new Error(
179
+ `No references configured for storage: ${storageName || DEFAULT_STORAGE}`
180
+ );
170
181
  }
171
- const storageRef = storageConf2.references.filter((refIt) => refIt.key === refKey)[0];
182
+ const storageRef = storageConf2.references.filter(
183
+ (refIt) => refIt.key === refKey
184
+ )[0];
172
185
  if (!storageRef) {
173
- throw new Error(`No reference available for storage: ${storageName || DEFAULT_STORAGE} and ref: ${refKey}`);
186
+ throw new Error(
187
+ `No reference available for storage: ${storageName || DEFAULT_STORAGE} and ref: ${refKey}`
188
+ );
174
189
  }
175
190
  const usedRef = subFolder ? ref(storageRef.storageRef, subFolder) : storageRef.storageRef;
176
- return fetchItemsAndFolders(usedRef, storageName, refKey, includeMetaData, true);
191
+ return fetchItemsAndFolders(
192
+ usedRef,
193
+ storageName,
194
+ refKey,
195
+ includeMetaData,
196
+ true
197
+ );
177
198
  };
178
199
  const downloadFileFirestorage = (file) => {
179
200
  if (!storageMap || storageMap.size === 0) {
@@ -8,12 +8,14 @@ const initFirestore = (app) => {
8
8
  }
9
9
  };
10
10
  const getFirebaseCollectionListener = (callback, col, constraints) => {
11
- const queryConstraints = (constraints || []).map((constraint) => {
12
- if (constraint.type === "where") {
13
- return where(constraint.field, constraint.operator, constraint.value);
11
+ const queryConstraints = (constraints || []).map(
12
+ (constraint) => {
13
+ if (constraint.type === "where") {
14
+ return where(constraint.field, constraint.operator, constraint.value);
15
+ }
16
+ throw new Error(`Unkown constraint type: ${constraint.type}`);
14
17
  }
15
- throw new Error(`Unkown constraint type: ${constraint.type}`);
16
- });
18
+ );
17
19
  const q = query(collection(db, col), ...queryConstraints);
18
20
  return onSnapshot(q, (querySnapshot) => callback(querySnapshot));
19
21
  };
@@ -43,15 +43,17 @@ const internalCallFunction = async (def, functionInput) => {
43
43
  }
44
44
  };
45
45
  const handleInvalidUser = () => {
46
- pdStore().dispatch(toastAction({
47
- txt: msg(
48
- "Sie haben nicht die erforderlichen Berechtigungen, um diese Aktion auszuführen. Wenden Sie sich an Ihren Administrator.",
49
- { id: "spaH.toast.error.user.invalid" }
50
- ),
51
- isError: true,
52
- isSuccess: false,
53
- duration: -1
54
- }));
46
+ pdStore().dispatch(
47
+ toastAction({
48
+ txt: msg(
49
+ "Sie haben nicht die erforderlichen Berechtigungen, um diese Aktion auszuführen. Wenden Sie sich an Ihren Administrator.",
50
+ { id: "spaH.toast.error.user.invalid" }
51
+ ),
52
+ isError: true,
53
+ isSuccess: false,
54
+ duration: -1
55
+ })
56
+ );
55
57
  };
56
58
  const callFunction = async (def, functionInput) => internalCallFunction(def, functionInput);
57
59
  export {
@@ -29,20 +29,19 @@ const initMessageToken = async (registration) => {
29
29
  if (!messaging || !firebaseMessagingAppConfigKey || !registration) {
30
30
  throw new Error("Messaging, Registration or Key not available");
31
31
  }
32
- const currentToken = await getToken(
33
- messaging,
34
- {
35
- vapidKey: firebaseMessagingAppConfigKey.apidKey,
36
- serviceWorkerRegistration: registration
37
- }
38
- );
32
+ const currentToken = await getToken(messaging, {
33
+ vapidKey: firebaseMessagingAppConfigKey.apidKey,
34
+ serviceWorkerRegistration: registration
35
+ });
39
36
  if (currentToken) {
40
37
  const storedToken = localStorage.getItem(NOTIFICATION_TOKEN);
41
38
  if (storedToken !== currentToken) {
42
39
  console.log("Update new token in Backend");
43
- pdStore().dispatch(updateNewNotificationToken({
44
- messagingToken: currentToken
45
- }));
40
+ pdStore().dispatch(
41
+ updateNewNotificationToken({
42
+ messagingToken: currentToken
43
+ })
44
+ );
46
45
  } else {
47
46
  console.log("RegisterDevice: Stored token is valid");
48
47
  }
@@ -67,9 +67,13 @@ const uploadStorageFileMock = (file) => {
67
67
  throw new Error(`Invalid storage name: ${storageName || DEFAULT_STORAGE}`);
68
68
  }
69
69
  if (!storageConf.references || storageConf.references.length === 0) {
70
- throw new Error(`No references configured for storage: ${storageName || DEFAULT_STORAGE}`);
70
+ throw new Error(
71
+ `No references configured for storage: ${storageName || DEFAULT_STORAGE}`
72
+ );
71
73
  }
72
- const uploadRefConf = referenceKey ? storageConf.references.filter((filterRef) => filterRef.key === referenceKey)[0] : storageConf.references[0];
74
+ const uploadRefConf = referenceKey ? storageConf.references.filter(
75
+ (filterRef) => filterRef.key === referenceKey
76
+ )[0] : storageConf.references[0];
73
77
  if (!uploadRefConf || !uploadRefConf.storageRef) {
74
78
  throw new Error(`No valid reference for key: ${referenceKey}`);
75
79
  }
@@ -81,14 +85,22 @@ const downloadFileMock = (file) => {
81
85
  return Promise.resolve("");
82
86
  };
83
87
  const getMockFileList = (storageName, refKey, subFolder, includeMetadata) => {
84
- console.log("Searching for Documents in ", storageName, refKey, subFolder, includeMetadata);
85
- return Promise.resolve([{
86
- fileName: "workReport.png",
87
- filePath: "workReports/1234234f2fswf/workReport.png",
88
- documentType: "ToDo",
88
+ console.log(
89
+ "Searching for Documents in ",
89
90
  storageName,
90
- refKey
91
- }]);
91
+ refKey,
92
+ subFolder,
93
+ includeMetadata
94
+ );
95
+ return Promise.resolve([
96
+ {
97
+ fileName: "workReport.png",
98
+ filePath: "workReports/1234234f2fswf/workReport.png",
99
+ documentType: "ToDo",
100
+ storageName,
101
+ refKey
102
+ }
103
+ ]);
92
104
  };
93
105
  export {
94
106
  downloadFileMock,
@@ -11,7 +11,9 @@ import { POST_LOGIN_REDIRECT_KEY } from "../PdSpaHelper.js";
11
11
  let provider;
12
12
  let app;
13
13
  const throwUndefinedProviderError = () => {
14
- throw new Error("Undefined service provider, please check configuration. 'firebase' or 'mock' allowed here.");
14
+ throw new Error(
15
+ "Undefined service provider, please check configuration. 'firebase' or 'mock' allowed here."
16
+ );
15
17
  };
16
18
  const setServiceProvider = (providerParam) => {
17
19
  provider = providerParam;
@@ -36,17 +38,16 @@ const initFirebaseApplicationServices = (firebaseApp, config) => {
36
38
  prepareMessaging(firebaseApp, config.messagingConfig);
37
39
  console.debug("Set firebase app and config for messaging");
38
40
  activateTokenChangeHandler(firebaseApp.name);
39
- console.debug(`idTokenChangeHandler for messaging and app ${firebaseApp.name} activated`);
41
+ console.debug(
42
+ `idTokenChangeHandler for messaging and app ${firebaseApp.name} activated`
43
+ );
40
44
  }
41
45
  console.debug("Firebase initialized");
42
46
  };
43
47
  const initAppImpl = (config) => {
44
48
  if (provider === "firebase" && config.firebaseConfig) {
45
49
  app = initializeApp(config.firebaseConfig);
46
- initFirebaseApplicationServices(
47
- app,
48
- config
49
- );
50
+ initFirebaseApplicationServices(app, config);
50
51
  } else if (provider === "mock") {
51
52
  initMockResponse(config.mock);
52
53
  initStorageMock("default", config.storageConfig);
@@ -56,12 +57,10 @@ const initAppImpl = (config) => {
56
57
  };
57
58
  const callFunctionImpl = async (def, functionInput) => {
58
59
  if (provider === "firebase") {
59
- const promise = callFunction(def, functionInput);
60
- return promise;
60
+ return callFunction(def, functionInput);
61
61
  }
62
62
  if (provider === "mock") {
63
- const promise = callFunctionMock(def, functionInput);
64
- return promise;
63
+ return callFunctionMock(def, functionInput);
65
64
  }
66
65
  return throwUndefinedProviderError();
67
66
  };
@@ -136,7 +135,12 @@ const uploadFile = (file) => {
136
135
  };
137
136
  const getStorageFileList = (storageName, keyRef, subFolder, includeMetadata) => {
138
137
  if (provider === "firebase") {
139
- return getFirestorageFileList(storageName, keyRef, subFolder, includeMetadata);
138
+ return getFirestorageFileList(
139
+ storageName,
140
+ keyRef,
141
+ subFolder,
142
+ includeMetadata
143
+ );
140
144
  }
141
145
  if (provider === "mock") {
142
146
  return getMockFileList(storageName, keyRef, subFolder, includeMetadata);
@@ -145,12 +149,7 @@ const getStorageFileList = (storageName, keyRef, subFolder, includeMetadata) =>
145
149
  };
146
150
  const getStorageFile = (storageName, refKey, storageURI, includeMetaData) => {
147
151
  if (provider === "firebase") {
148
- return getFirestorageFile(
149
- storageName,
150
- refKey,
151
- storageURI,
152
- includeMetaData
153
- );
152
+ return getFirestorageFile(storageName, refKey, storageURI, includeMetaData);
154
153
  }
155
154
  return throwUndefinedProviderError();
156
155
  };
@@ -190,7 +189,9 @@ const registerAppDeviceForNotification = async (registration) => {
190
189
  return registerDevice(registration);
191
190
  }
192
191
  if (provider === "mock") {
193
- console.log("registerAppDeviceForNotification not implemented for MOCK, do noting");
192
+ console.log(
193
+ "registerAppDeviceForNotification not implemented for MOCK, do noting"
194
+ );
194
195
  return Promise.resolve();
195
196
  }
196
197
  return throwUndefinedProviderError();
@@ -3,14 +3,38 @@ const initIndexDBSucess = action("SPA_INIT_INDEX_DB_SUCCESS");
3
3
  const loginSucess = action("SPA_LOGIN_SUCCESS");
4
4
  const nologin = action("SPA_NO_LOGIN");
5
5
  const routeAction = action("SPA_APP_ROUTE", payload());
6
- const toastAction = action("SPA_APP_TOAST", payload());
7
- const updateInternetOffline = action("SPA_APP_UPDATE_INTERNET_OFFLINE", payload());
8
- const addLoadingState = action("SPA_APP_ADD_LOADING", payload());
9
- const changeSubTask = action("SPA_APP_CHANGE_SUB_LOADING", payload());
10
- const removeLoadingState = action("SPA_APP_REMOVE_LOADING", payload());
11
- const updateNewNotificationToken = action("UPDATE_NOTIFICATION_TOKEN", payload());
12
- const updateNewNotificationTokenSuccess = action("UPDATE_NOTIFICATION_TOKEN_SUCCESS", payload());
13
- const updateNewNotificationTokenFail = action("UPDATE_NOTIFICATION_TOKEN_FAIL", payload());
6
+ const toastAction = action(
7
+ "SPA_APP_TOAST",
8
+ payload()
9
+ );
10
+ const updateInternetOffline = action(
11
+ "SPA_APP_UPDATE_INTERNET_OFFLINE",
12
+ payload()
13
+ );
14
+ const addLoadingState = action(
15
+ "SPA_APP_ADD_LOADING",
16
+ payload()
17
+ );
18
+ const changeSubTask = action(
19
+ "SPA_APP_CHANGE_SUB_LOADING",
20
+ payload()
21
+ );
22
+ const removeLoadingState = action(
23
+ "SPA_APP_REMOVE_LOADING",
24
+ payload()
25
+ );
26
+ const updateNewNotificationToken = action(
27
+ "UPDATE_NOTIFICATION_TOKEN",
28
+ payload()
29
+ );
30
+ const updateNewNotificationTokenSuccess = action(
31
+ "UPDATE_NOTIFICATION_TOKEN_SUCCESS",
32
+ payload()
33
+ );
34
+ const updateNewNotificationTokenFail = action(
35
+ "UPDATE_NOTIFICATION_TOKEN_FAIL",
36
+ payload()
37
+ );
14
38
  export {
15
39
  addLoadingState,
16
40
  changeSubTask,
@@ -14,11 +14,13 @@ const appRouteEffect = createEffect(
14
14
  if (!routeElement) {
15
15
  console.error("No route element set for appRouteEffect");
16
16
  } else {
17
- routeElement.dispatchEvent(new CustomEvent("route-event", {
18
- detail: { route: action.payload },
19
- bubbles: true,
20
- composed: true
21
- }));
17
+ routeElement.dispatchEvent(
18
+ new CustomEvent("route-event", {
19
+ detail: { route: action.payload },
20
+ bubbles: true,
21
+ composed: true
22
+ })
23
+ );
22
24
  }
23
25
  })
24
26
  ),
@@ -33,16 +35,18 @@ const appToastEffect = createEffect(
33
35
  if (!routeElement) {
34
36
  console.error("No route element set for appToastEffect");
35
37
  } else {
36
- routeElement.dispatchEvent(new CustomEvent("toast-event", {
37
- detail: {
38
- txt: action.payload.txt,
39
- isSuccess: action.payload.isSuccess,
40
- isError: action.payload.isError,
41
- duration: action.payload.duration
42
- },
43
- bubbles: true,
44
- composed: true
45
- }));
38
+ routeElement.dispatchEvent(
39
+ new CustomEvent("toast-event", {
40
+ detail: {
41
+ txt: action.payload.txt,
42
+ isSuccess: action.payload.isSuccess,
43
+ isError: action.payload.isError,
44
+ duration: action.payload.duration
45
+ },
46
+ bubbles: true,
47
+ composed: true
48
+ })
49
+ );
46
50
  }
47
51
  })
48
52
  ),