@dative-gpi/foundation-shared-services 1.0.40 → 1.0.42

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,4 +1,4 @@
1
1
  export * from "./useAppLanguageCode";
2
2
  export * from "./useAppLanguages";
3
3
  export * from "./useAppTimeZone";
4
- export * from "./useExtensionJwt";
4
+ export * from "./useAppAuthToken";
@@ -0,0 +1,17 @@
1
+ import { computed, ref } from "vue";
2
+
3
+ const authToken = ref<string | undefined>(undefined);
4
+
5
+ export const useAppAuthToken = () => {
6
+ const setAppAuthToken = (payload: string) => {
7
+ authToken.value = payload;
8
+ };
9
+
10
+ const ready = computed(() => authToken.value !== null);
11
+
12
+ return {
13
+ authToken,
14
+ ready,
15
+ setAppAuthToken
16
+ };
17
+ }
@@ -1,170 +1,56 @@
1
- import { addMilliseconds, format, parse, subDays } from "date-fns";
2
1
  import { computed, ref } from "vue";
3
2
 
4
- import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
5
- import { ISO_FORMAT, OPTIONS } from "@dative-gpi/foundation-shared-domain/tools";
6
-
7
- import { useAppLanguageCode } from "./useAppLanguageCode";
8
-
9
3
  const timeZone = ref<string | undefined>(undefined);
10
4
 
11
5
  export const useAppTimeZone = () => {
12
- const { $tr } = useTranslationsProvider();
13
-
14
6
  const setAppTimeZone = (payload: string) => {
15
7
  timeZone.value = payload;
16
8
  };
17
9
 
18
- const epochToShortDateFormat = (value: number | null | undefined): string => {
19
- if (value == null || !isFinite(value)) {
20
- return "";
21
- }
22
- const date = new Date(value);
23
- return date.toLocaleString(useAppLanguageCode().languageCode.value, { ...OPTIONS.shortDate, timeZone: timeZone.value });
24
- };
25
-
26
- const epochToLongDateFormat = (value: number | null | undefined): string => {
27
- if (value == null || !isFinite(value)) {
28
- return "";
29
- }
30
- const date = new Date(value);
31
- const now = new Date();
32
- if (date.toLocaleString(useAppLanguageCode().languageCode.value, { ...OPTIONS.shortDate, timeZone: timeZone.value }) === now.toLocaleString(useAppLanguageCode().languageCode.value, { ...OPTIONS.shortDate, timeZone: timeZone.value })) {
33
- return $tr("ui.time-zone.today", "Today");
34
- }
35
- if (date.toLocaleString(useAppLanguageCode().languageCode.value, { ...OPTIONS.shortDate, timeZone: timeZone.value }) === subDays(now, 1).toLocaleString(useAppLanguageCode().languageCode.value, { ...OPTIONS.shortDate, timeZone: timeZone.value })) {
36
- return $tr("ui.time-zone.yesterday", "Yesterday");
37
- }
38
- const dateString = date.toLocaleString(useAppLanguageCode().languageCode.value, { ...OPTIONS.longDate, timeZone: timeZone.value });
39
- return dateString[0].toLocaleUpperCase() + dateString.slice(1);
40
- };
41
-
42
- const epochToShortTimeFormat = (value: number | null | undefined): string => {
43
- if (value == null || !isFinite(value)) {
44
- return "";
45
- }
46
- const date = new Date(value);
47
- return date.toLocaleString(useAppLanguageCode().languageCode.value, { ...OPTIONS.shortTime, timeZone: timeZone.value });
48
- };
49
-
50
- const epochToLongTimeFormat = (value: number | null | undefined): string => {
51
- if (value == null || !isFinite(value)) {
52
- return "";
53
- }
54
- const date = new Date(value);
55
- const now = new Date();
56
- if (date.toLocaleString(useAppLanguageCode().languageCode.value, { ...OPTIONS.shortDate, timeZone: timeZone.value }) === now.toLocaleString(useAppLanguageCode().languageCode.value, { ...OPTIONS.shortDate, timeZone: timeZone.value })) {
57
- return `${$tr("ui.time-zone.today-at", "Today at")} ${date.toLocaleString(useAppLanguageCode().languageCode.value, { ...OPTIONS.time, timeZone: timeZone.value })}`;
58
- }
59
- if (date.toLocaleString(useAppLanguageCode().languageCode.value, { ...OPTIONS.shortDate, timeZone: timeZone.value }) === subDays(now, 1).toLocaleString(useAppLanguageCode().languageCode.value, { ...OPTIONS.shortDate, timeZone: timeZone.value })) {
60
- return `${$tr("ui.time-zone.yesterday-at", "Yesterday at")} ${date.toLocaleString(useAppLanguageCode().languageCode.value, { ...OPTIONS.time, timeZone: timeZone.value })}`;
61
- }
62
- const dateString = date.toLocaleString(useAppLanguageCode().languageCode.value, { ...OPTIONS.longTime, timeZone: timeZone.value });
63
- return dateString[0].toLocaleUpperCase() + dateString.slice(1);
64
- };
65
-
66
- const epochToTimeOnlyFormat = (value: number | null | undefined): string => {
67
- if (value == null || !isFinite(value)) {
68
- return "";
69
- }
70
- const date = new Date(value);
71
- return date.toLocaleString(useAppLanguageCode().languageCode.value, { ...OPTIONS.time, timeZone: timeZone.value });
72
- };
73
-
74
- const getOffsetUser = (): number => {
75
- const offsetParts = (Intl.DateTimeFormat(undefined, {
76
- timeZone: timeZone.value,
10
+ const getUserFormatter = (): Intl.DateTimeFormat => {
11
+ return new Intl.DateTimeFormat(undefined, {
12
+ timeZone: timeZone.value || Intl.DateTimeFormat().resolvedOptions().timeZone,
77
13
  timeZoneName: "longOffset"
78
- }).formatToParts(new Date).pop()?.value.slice(3) || "+00:00").split(':');
79
- return (parseInt(offsetParts[0]) * 60 + parseInt(offsetParts[1])) * 60 * 1000;
80
- };
81
-
82
- const getOffsetUserChart = (withUTC: boolean = true): string => {
83
- const offsetPart = (Intl.DateTimeFormat(undefined, {
84
- timeZone: timeZone.value,
85
- timeZoneName: "longOffset"
86
- }).formatToParts(new Date).pop()?.value.slice(3) || "+00:00");
87
- return `${withUTC ? 'UTC ' : ''}${offsetPart}`;
14
+ });
88
15
  }
89
16
 
90
- const getOffsetMachine = (): number => {
91
- const offsetParts = (Intl.DateTimeFormat(undefined, {
92
- timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
93
- timeZoneName: "longOffset"
94
- }).formatToParts(new Date).pop()?.value.slice(3) || "+00:00").split(':');
95
- return (parseInt(offsetParts[0]) * 60 + parseInt(offsetParts[1])) * 60 * 1000;
96
- };
97
-
98
- const getOffsetMachineChart = (withUTC: boolean = true): string => {
99
- const offsetPart = (Intl.DateTimeFormat(undefined, {
17
+ const getMachineFormatter = (): Intl.DateTimeFormat => {
18
+ return new Intl.DateTimeFormat(undefined, {
100
19
  timeZone: Intl.DateTimeFormat().resolvedOptions().timeZone,
101
20
  timeZoneName: "longOffset"
102
- }).formatToParts(new Date).pop()?.value.slice(3) || "+00:00");
103
- return `${withUTC ? 'UTC ' : ''}${offsetPart}`;
21
+ });
104
22
  }
105
23
 
106
- const getOffsetDifference = (): number => {
107
- if (timeZone.value == null) {
108
- return 0;
109
- }
110
- return getOffsetUser() - getOffsetMachine();
111
- };
112
-
113
- const todayToEpoch = (): number => {
114
- return (new Date().getTime() + getOffsetDifference());
115
- };
116
-
117
- const pickerToEpoch = (value: Date | null | undefined): number => {
118
- if (value != null) {
119
- return value.getTime() - getOffsetDifference();
120
- }
121
- return 0;
122
- };
123
-
124
- const epochToPicker = (value: number | null | undefined): Date => {
125
- if (value != null) {
126
- return new Date(value + getOffsetDifference());
127
- }
128
- return new Date(0);
129
- };
24
+ const getUserOffsetName = (): string => {
25
+ const formatter = getUserFormatter();
26
+ const currentDate = formatter.formatToParts(new Date());
27
+ const timeZoneName = currentDate.find((part) => part.type === "timeZoneName")?.value || "UTC+00:00";
28
+ return timeZoneName
29
+ }
130
30
 
131
- const epochToPickerHeader = (value: number): { d: number, m: number, y: number } => {
132
- const date = epochToPicker(value);
133
- return { d: date.getDate(), m: date.getMonth(), y: date.getFullYear() };
134
- };
31
+ const getUserOffset = (): number => {
32
+ const timeZoneName = getUserOffsetName();
33
+ const [hours, minutes] = timeZoneName.slice(3).split(':');
135
34
 
136
- const todayToPicker = (): string => {
137
- const date = addMilliseconds(new Date(), -getOffsetMachine());
138
- date.setSeconds(0, 0);
139
- return format(date, ISO_FORMAT);
35
+ return (parseInt(hours) * 60 + parseInt(minutes)) * 60 * 1000;
140
36
  };
141
37
 
142
- const yesterdayToPicker = (): string => {
143
- const date = addMilliseconds(subDays(new Date(), 1), -getOffsetMachine());
144
- date.setSeconds(0, 0);
145
- return format(date, ISO_FORMAT);
38
+ const getMachineOffsetName = (): string => {
39
+ const formatter = getMachineFormatter();
40
+ const currentDate = formatter.formatToParts(new Date());
41
+ const timeZoneName = currentDate.find((part) => part.type === "timeZoneName")?.value || "UTC+00:00";
42
+ return timeZoneName;
146
43
  };
147
44
 
148
- const parseForPicker = (value: string, dateFormat: string = ISO_FORMAT): number | null => {
149
- const date = addMilliseconds(parse(value, dateFormat, new Date()), getOffsetUser());
150
- if (!isFinite(date.getTime())) {
151
- return null;
152
- }
153
- return date.getTime();
154
- };
45
+ const getMachineOffset = (): number => {
46
+ const timeZoneName = getMachineOffsetName();
47
+ const [hours, minutes] = timeZoneName.slice(3).split(':');
155
48
 
156
- const formatFromPicker = (date: number | null): string => {
157
- if (date != null) {
158
- return format(date - getOffsetMachine(), ISO_FORMAT);
159
- }
160
- return "";
161
- };
49
+ return (parseInt(hours) * 60 + parseInt(minutes)) * 60 * 1000;
50
+ }
162
51
 
163
- const formatEpochToVariable = (epoch: number | undefined): string => {
164
- if (epoch == null || !isFinite(epoch)) {
165
- return "";
166
- }
167
- return format(epoch - getOffsetMachine(), ISO_FORMAT);
52
+ const getOffsetDifference = (): number => {
53
+ return getUserOffset() - getMachineOffset();
168
54
  };
169
55
 
170
56
  const ready = computed(() => timeZone.value !== null);
@@ -173,24 +59,10 @@ export const useAppTimeZone = () => {
173
59
  ready,
174
60
  timeZone,
175
61
  setAppTimeZone,
176
- todayToEpoch,
177
- pickerToEpoch,
178
- epochToPicker,
179
- epochToPickerHeader,
180
- epochToLongDateFormat,
181
- epochToLongTimeFormat,
182
- epochToShortDateFormat,
183
- epochToShortTimeFormat,
184
- epochToTimeOnlyFormat,
185
- parseForPicker,
186
- todayToPicker,
187
- yesterdayToPicker,
188
- formatFromPicker,
189
- formatEpochToVariable,
190
- getOffsetUser,
191
- getOffsetMachine,
62
+ getUserOffset,
63
+ getUserOffsetName,
64
+ getMachineOffset,
65
+ getMachineOffsetName,
192
66
  getOffsetDifference,
193
- getOffsetUserChart,
194
- getOffsetMachineChart
195
67
  };
196
68
  }
@@ -2,4 +2,5 @@ export * from "./services";
2
2
  export * from "./app";
3
3
 
4
4
  export * from "./useFiles";
5
- export * from "./useFoundationShared";
5
+ export * from "./useFoundationShared";
6
+ export * from "./useDateFormat";
@@ -0,0 +1,153 @@
1
+ import { addMilliseconds, format, parse, subDays } from "date-fns";
2
+
3
+ import { useTranslations as useTranslationsProvider } from "@dative-gpi/bones-ui/composables";
4
+ import { ISO_FORMAT, OPTIONS } from "@dative-gpi/foundation-shared-domain/tools";
5
+
6
+ import { useAppLanguageCode, useAppTimeZone } from "./app/";
7
+
8
+ export const useDateFormat = () => {
9
+ const { $tr } = useTranslationsProvider();
10
+
11
+ const { languageCode } = useAppLanguageCode();
12
+ const { timeZone, getOffsetDifference, getMachineOffset, getUserOffset } = useAppTimeZone();
13
+
14
+ const isEpochToday = (value: number | null | undefined): boolean => {
15
+ if (value == null || !isFinite(value)) {
16
+ return false;
17
+ }
18
+ const date = new Date(value);
19
+ const now = new Date();
20
+ return date.toLocaleString(languageCode.value, { ...OPTIONS.shortDate, timeZone: timeZone.value })
21
+ === now.toLocaleString(languageCode.value, { ...OPTIONS.shortDate, timeZone: timeZone.value });
22
+ }
23
+
24
+ const isEpochYesterday = (value: number | null | undefined): boolean => {
25
+ if (value == null || !isFinite(value)) {
26
+ return false;
27
+ }
28
+ const date = new Date(value);
29
+ const now = new Date();
30
+ return date.toLocaleString(languageCode.value, { ...OPTIONS.shortDate, timeZone: timeZone.value })
31
+ === subDays(now, 1).toLocaleString(languageCode.value, { ...OPTIONS.shortDate, timeZone: timeZone.value });
32
+ }
33
+
34
+ const epochToShortDateFormat = (value: number | null | undefined): string => {
35
+ if (value == null || !isFinite(value)) {
36
+ return "";
37
+ }
38
+ const date = new Date(value);
39
+ return date.toLocaleString(languageCode.value, { ...OPTIONS.shortDate, timeZone: timeZone.value });
40
+ };
41
+
42
+ const epochToLongDateFormat = (value: number | null | undefined): string => {
43
+ if (value == null || !isFinite(value)) {
44
+ return "";
45
+ }
46
+ const date = new Date(value);
47
+ if (isEpochToday(value)) {
48
+ return $tr("ui.time-zone.today", "Today");
49
+ }
50
+ if (isEpochYesterday(value)) {
51
+ return $tr("ui.time-zone.yesterday", "Yesterday");
52
+ }
53
+ const dateString = date.toLocaleString(languageCode.value, { ...OPTIONS.longDate, timeZone: timeZone.value });
54
+ return dateString[0].toLocaleUpperCase() + dateString.slice(1);
55
+ };
56
+
57
+ const epochToShortTimeFormat = (value: number | null | undefined): string => {
58
+ if (value == null || !isFinite(value)) {
59
+ return "";
60
+ }
61
+ const date = new Date(value);
62
+ return date.toLocaleString(languageCode.value, { ...OPTIONS.shortTime, timeZone: timeZone.value });
63
+ };
64
+
65
+ const epochToLongTimeFormat = (value: number | null | undefined): string => {
66
+ if (value == null || !isFinite(value)) {
67
+ return "";
68
+ }
69
+ const date = new Date(value);
70
+ if (isEpochToday(value)) {
71
+ return `${$tr("ui.time-zone.today-at", "Today at")} ${date.toLocaleString(languageCode.value, { ...OPTIONS.time, timeZone: timeZone.value })}`;
72
+ }
73
+ if (isEpochYesterday(value)) {
74
+ return `${$tr("ui.time-zone.yesterday-at", "Yesterday at")} ${date.toLocaleString(languageCode.value, { ...OPTIONS.time, timeZone: timeZone.value })}`;
75
+ }
76
+ const dateString = date.toLocaleString(languageCode.value, { ...OPTIONS.longTime, timeZone: timeZone.value });
77
+ return dateString[0].toLocaleUpperCase() + dateString.slice(1);
78
+ };
79
+
80
+ const epochToTimeOnlyFormat = (value: number | null | undefined): string => {
81
+ if (value == null || !isFinite(value)) {
82
+ return "";
83
+ }
84
+ const date = new Date(value);
85
+ return date.toLocaleString(languageCode.value, { ...OPTIONS.time, timeZone: timeZone.value });
86
+ };
87
+
88
+ const todayToEpoch = (): number => {
89
+ return new Date().getTime() + getOffsetDifference();
90
+ };
91
+
92
+ const pickerToEpoch = (value: Date | null | undefined): number => {
93
+ if (value != null) {
94
+ return value.getTime() - getOffsetDifference();
95
+ }
96
+ return 0;
97
+ };
98
+
99
+ const epochToPicker = (value: number | null | undefined): Date => {
100
+ if (value != null) {
101
+ return new Date(value + getOffsetDifference());
102
+ }
103
+ return new Date(0);
104
+ };
105
+
106
+ const epochToPickerHeader = (value: number): { d: number, m: number, y: number } => {
107
+ const date = epochToPicker(value);
108
+ return { d: date.getDate(), m: date.getMonth(), y: date.getFullYear() };
109
+ };
110
+
111
+ const todayToPicker = (): string => {
112
+ const date = addMilliseconds(new Date(), -getMachineOffset());
113
+ date.setSeconds(0, 0);
114
+ return format(date, ISO_FORMAT);
115
+ };
116
+
117
+ const yesterdayToPicker = (): string => {
118
+ const date = addMilliseconds(subDays(new Date(), 1), -getMachineOffset());
119
+ date.setSeconds(0, 0);
120
+ return format(date, ISO_FORMAT);
121
+ };
122
+
123
+ const parseForPicker = (value: string, dateFormat: string = ISO_FORMAT): number | null => {
124
+ const date = addMilliseconds(parse(value, dateFormat, new Date()), getUserOffset());
125
+ if (!isFinite(date.getTime())) {
126
+ return null;
127
+ }
128
+ return date.getTime();
129
+ };
130
+
131
+ const epochToISO = (date: number | null): string => {
132
+ if (date != null) {
133
+ return format(date - getMachineOffset(), ISO_FORMAT);
134
+ }
135
+ return "";
136
+ };
137
+
138
+ return {
139
+ todayToEpoch,
140
+ pickerToEpoch,
141
+ epochToPicker,
142
+ epochToPickerHeader,
143
+ epochToLongDateFormat,
144
+ epochToLongTimeFormat,
145
+ epochToShortDateFormat,
146
+ epochToShortTimeFormat,
147
+ epochToTimeOnlyFormat,
148
+ parseForPicker,
149
+ todayToPicker,
150
+ yesterdayToPicker,
151
+ epochToISO
152
+ };
153
+ }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dative-gpi/foundation-shared-services",
3
3
  "sideEffects": false,
4
- "version": "1.0.40",
4
+ "version": "1.0.42",
5
5
  "description": "",
6
6
  "publishConfig": {
7
7
  "access": "public"
@@ -10,7 +10,7 @@
10
10
  "author": "",
11
11
  "license": "ISC",
12
12
  "dependencies": {
13
- "@dative-gpi/foundation-shared-domain": "1.0.40"
13
+ "@dative-gpi/foundation-shared-domain": "1.0.42"
14
14
  },
15
15
  "peerDependencies": {
16
16
  "@dative-gpi/bones-ui": "^0.0.75",
@@ -18,5 +18,5 @@
18
18
  "vue": "^3.4.29",
19
19
  "vue-router": "^4.3.0"
20
20
  },
21
- "gitHead": "a1e2c35d0e08ce37a05a56d7d7f0f477b935a645"
21
+ "gitHead": "0c0ad1947f4b469307f0e9a5c636b4d5df11c589"
22
22
  }
@@ -1,17 +0,0 @@
1
- import { computed, ref } from "vue";
2
-
3
- const jwt = ref<string | undefined>(undefined);
4
-
5
- export const useExtensionJwt = () => {
6
- const setExtensionJwt = (payload: string) => {
7
- jwt.value = payload;
8
- };
9
-
10
- const ready = computed(() => jwt.value !== null);
11
-
12
- return {
13
- jwt,
14
- ready,
15
- setExtensionJwt
16
- };
17
- }