@dative-gpi/foundation-shared-services 0.0.100 → 0.0.102

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.
@@ -1,10 +1,10 @@
1
- import { computed, ref } from "vue";
2
-
1
+ import { format, subDays, addDays, addMilliseconds, parse } from "date-fns";
3
2
  import { enUS, enGB, fr, it, es, de, Locale } from "date-fns/locale";
4
- import { format, subDays } from "date-fns";
3
+ import { computed, ref } from "vue";
5
4
 
6
5
  import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
7
6
  import { TimeZoneInfos } from "@dative-gpi/foundation-shared-domain/models";
7
+ import { isoTimeFormat } from "@dative-gpi/foundation-shared-domain/tools";
8
8
 
9
9
  import { useAppLanguageCode } from "./useAppLanguageCode";
10
10
 
@@ -15,6 +15,46 @@ export const useAppTimeZone = () => {
15
15
  timeZone.value = payload;
16
16
  };
17
17
 
18
+ const getOffsetNumber = (offsetString: string, hours: boolean = false): number => {
19
+ let offset = 0;
20
+ switch (offsetString.toLowerCase().replaceAll(" ", "")) {
21
+ case "utc-11:00:00": offset = -11; break;
22
+ case "utc-10:00:00": offset = -10; break;
23
+ case "utc-09:00:00": offset = -9; break;
24
+ case "utc-08:00:00": offset = -8; break;
25
+ case "utc-07:00:00": offset = -7; break;
26
+ case "utc-06:00:00": offset = -6; break;
27
+ case "utc-05:00:00": offset = -5; break;
28
+ case "utc-04:00:00": offset = -4; break;
29
+ case "utc-03:00:00": offset = -3; break;
30
+ case "utc-02:00:00": offset = -2; break;
31
+ case "utc-01:00:00": offset = -1; break;
32
+ case "utc+01:00:00": offset = +1; break;
33
+ case "utc+02:00:00": offset = +2; break;
34
+ case "utc+03:00:00": offset = +3; break;
35
+ case "utc+04:00:00": offset = +4; break;
36
+ case "utc+05:00:00": offset = +5; break;
37
+ case "utc+06:00:00": offset = +6; break;
38
+ case "utc+07:00:00": offset = +7; break;
39
+ case "utc+08:00:00": offset = +8; break;
40
+ case "utc+09:00:00": offset = +9; break;
41
+ case "utc+10:00:00": offset = +10; break;
42
+ case "utc+11:00:00": offset = +11; break;
43
+ case "utc+12:00:00": offset = +12; break;
44
+ case "utc+13:00:00": offset = +13; break;
45
+ case "utc+14:00:00": offset = +14; break;
46
+ }
47
+ return hours ? offset : offset * 60 * 60 * 1000;
48
+ }
49
+
50
+ const userOffset = (): number => {
51
+ return getOffsetNumber(getUserOffset());
52
+ };
53
+
54
+ const machineOffset = (): number => {
55
+ return getOffsetNumber(getMachineOffset());
56
+ };
57
+
18
58
  const getUserOffset = (): string => {
19
59
  return timeZone?.value?.offset ?? "UTC +00:00:00";
20
60
  };
@@ -74,7 +114,7 @@ export const useAppTimeZone = () => {
74
114
  today.setHours(0, 0, 0, 0);
75
115
  }
76
116
  return today.getTime() + getMachineOffsetMillis() - getUserOffsetMillis();
77
- }
117
+ };
78
118
 
79
119
  const pickerToEpoch = (value: Date | null | undefined): number => {
80
120
  if (value != null) {
@@ -179,7 +219,31 @@ export const useAppTimeZone = () => {
179
219
  case "de-DE": return de;
180
220
  default: return enUS;
181
221
  }
182
- }
222
+ };
223
+
224
+ const parseForPicker = (value: string, dateFormat: string = isoTimeFormat()): number | null => {
225
+ let date = parse(value!, dateFormat, new Date());
226
+ date = addMilliseconds(date, userOffset());
227
+ if (!isFinite(date.getTime())) {
228
+ return null;
229
+ }
230
+ return date.getTime();
231
+ };
232
+
233
+ const formatCurrentForPicker = (daysOffset: number = -1): string => {
234
+ let date = new Date();
235
+ date.setSeconds(0, 0);
236
+ date = addMilliseconds(addDays(date, daysOffset), -machineOffset());
237
+ return format(date, isoTimeFormat());
238
+ };
239
+
240
+ const formatFromPicker = (date: number | null): string => {
241
+ if (date != null) {
242
+ const epoch = date - machineOffset() + (machineOffset() - userOffset());
243
+ return format(epoch, isoTimeFormat());
244
+ }
245
+ return "";
246
+ };
183
247
 
184
248
  const ready = computed(() => timeZone.value !== null);
185
249
 
@@ -198,6 +262,9 @@ export const useAppTimeZone = () => {
198
262
  epochToLongDateFormat,
199
263
  epochToLongTimeFormat,
200
264
  epochToShortDateFormat,
201
- epochToShortTimeFormat
265
+ epochToShortTimeFormat,
266
+ parseForPicker,
267
+ formatCurrentForPicker,
268
+ formatFromPicker
202
269
  };
203
270
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dative-gpi/foundation-shared-services",
3
3
  "sideEffects": false,
4
- "version": "0.0.100",
4
+ "version": "0.0.102",
5
5
  "description": "",
6
6
  "publishConfig": {
7
7
  "access": "public"
@@ -11,10 +11,10 @@
11
11
  "license": "ISC",
12
12
  "dependencies": {
13
13
  "@dative-gpi/bones-ui": "^0.0.73",
14
- "@dative-gpi/foundation-shared-domain": "0.0.100",
14
+ "@dative-gpi/foundation-shared-domain": "0.0.102",
15
15
  "@microsoft/signalr": "^8.0.0",
16
16
  "vue": "^3.4.23",
17
17
  "vue-router": "^4.2.5"
18
18
  },
19
- "gitHead": "f1231dafad8eae9bf349af5f0e238dd88d20f2e2"
19
+ "gitHead": "d2534b5fa79d557769bcdfd5da4b8dffa0f42c3e"
20
20
  }