@dative-gpi/foundation-shared-components 1.0.22 → 1.0.23

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.
@@ -40,7 +40,7 @@
40
40
  <script lang="ts">
41
41
  import { computed, defineComponent, type PropType } from "vue";
42
42
 
43
- import { DateRules, IconRules, NumberRules, TextRules, TimeRules } from "../../models";
43
+ import { DateRules, IconRules, NumberRules, TextRules, TimeRules, TimeStepRules } from "../../models";
44
44
  import { useMagicFieldProvider } from "../../composables";
45
45
  import { MagicFieldType } from "../../models/magicFields";
46
46
 
@@ -100,6 +100,8 @@ export default defineComponent({
100
100
  return [IconRules.required()];
101
101
  case MagicFieldType.TimeField:
102
102
  return [TimeRules.required()];
103
+ case MagicFieldType.TimeStepField:
104
+ return [TimeStepRules.required()];
103
105
  }
104
106
  return [];
105
107
  });
@@ -66,7 +66,7 @@ import { useAppTimeZone } from "@dative-gpi/foundation-shared-services/composabl
66
66
 
67
67
  import { useMagicFieldProvider } from "../../composables";
68
68
  import { MagicFieldType } from "../../models/magicFields";
69
- import { getTimeBestString } from "../../utils";
69
+ import { getTimeBestString, timeStepToString } from "../../utils";
70
70
 
71
71
  import FSSelectField from "./FSSelectField.vue";
72
72
  import FSIcon from "../FSIcon.vue";
@@ -149,6 +149,8 @@ export default defineComponent({
149
149
  return epochToShortTimeFormat(value);
150
150
  case MagicFieldType.TimeField:
151
151
  return getTimeBestString(value);
152
+ case MagicFieldType.TimeStepField:
153
+ return timeStepToString(value);
152
154
  default:
153
155
  return value;
154
156
  }
@@ -166,6 +168,7 @@ export default defineComponent({
166
168
  }
167
169
  emit("update:modelValue", value.toString());
168
170
  break;
171
+ case MagicFieldType.TimeStepField:
169
172
  default:
170
173
  emit("update:modelValue", value);
171
174
  break;
@@ -15,8 +15,8 @@
15
15
  :rules="$props.rules"
16
16
  :hideHeader="true"
17
17
  :messages="messages"
18
- :modelValue="$props.modelValue.value"
19
- @update:modelValue="$emit('update:modelValue', { value: $event, unit: $props.modelValue.unit })"
18
+ :modelValue="$props.modelValue && $props.modelValue.value || 0"
19
+ @update:modelValue="$emit('update:modelValue', { value: $event, unit: $props.modelValue && $props.modelValue.unit || units[0].id })"
20
20
  v-bind="$attrs"
21
21
  >
22
22
  <template
@@ -35,8 +35,8 @@
35
35
  :hideHeader="true"
36
36
  :clearable="false"
37
37
  :items="units"
38
- :modelValue="$props.modelValue.unit"
39
- @update:modelValue="$emit('update:modelValue', { value: $props.modelValue.value, unit: $event })"
38
+ :modelValue="$props.modelValue && $props.modelValue.unit || units[0].id"
39
+ @update:modelValue="$emit('update:modelValue', { value: $props.modelValue && $props.modelValue.value || 0, unit: $event })"
40
40
  >
41
41
  <template
42
42
  v-for="(_, name) in selectSlots"
@@ -85,7 +85,7 @@ export default defineComponent({
85
85
  default: null
86
86
  },
87
87
  modelValue: {
88
- type: Object as PropType<{ value: number, unit: TimeUnit }>,
88
+ type: Object as PropType<{ value: number, unit: TimeUnit } | null>,
89
89
  required: true
90
90
  },
91
91
  allowedUnits: {
@@ -3,12 +3,13 @@ import { defineAsyncComponent } from "vue";
3
3
  import { MagicFieldType } from "../models/magicFields";
4
4
 
5
5
  const FIELDS = {
6
- [MagicFieldType.NumberField] : defineAsyncComponent(() => import("../components/fields/FSNumberField.vue")),
7
- [MagicFieldType.TextField] : defineAsyncComponent(() => import("../components/fields/FSTextField.vue")),
8
- [MagicFieldType.Switch] : defineAsyncComponent(() => import("../components/FSSwitch.vue")),
9
- [MagicFieldType.DateTimeField]: defineAsyncComponent(() => import("../components/fields/FSDateTimeField.vue")),
10
- [MagicFieldType.IconField] : defineAsyncComponent(() => import("../components/fields/FSIconField.vue")),
11
- [MagicFieldType.TimeField] : defineAsyncComponent(() => import("../components/fields/FSTimeField.vue")),
6
+ [MagicFieldType.NumberField] : defineAsyncComponent(() => import("../components/fields/FSNumberField.vue")),
7
+ [MagicFieldType.TextField] : defineAsyncComponent(() => import("../components/fields/FSTextField.vue")),
8
+ [MagicFieldType.Switch] : defineAsyncComponent(() => import("../components/FSSwitch.vue")),
9
+ [MagicFieldType.DateTimeField] : defineAsyncComponent(() => import("../components/fields/FSDateTimeField.vue")),
10
+ [MagicFieldType.IconField] : defineAsyncComponent(() => import("../components/fields/FSIconField.vue")),
11
+ [MagicFieldType.TimeField] : defineAsyncComponent(() => import("../components/fields/FSTimeField.vue")),
12
+ [MagicFieldType.TimeStepField] : defineAsyncComponent(() => import("../components/fields/FSTimeStepField.vue")),
12
13
  };
13
14
 
14
15
  export const useMagicFieldProvider = () => {
@@ -6,4 +6,5 @@ export enum MagicFieldType {
6
6
  DateTimeField = 4,
7
7
  IconField = 5,
8
8
  TimeField = 6,
9
+ TimeStepField = 7,
9
10
  }
package/models/rules.ts CHANGED
@@ -3,6 +3,7 @@ import { useAppTimeZone } from "@dative-gpi/foundation-shared-services/composabl
3
3
  import { validateExpression } from "@dative-gpi/foundation-shared-domain/tools";
4
4
 
5
5
  import { getTimeBestString } from "../utils";
6
+ import type { TimeUnit } from "@/shared/foundation-shared-domain";
6
7
 
7
8
  const { epochToLongDateFormat } = useAppTimeZone()!;
8
9
  const { $tr } = useTranslationsProvider();
@@ -65,6 +66,10 @@ export const TimeRules = {
65
66
  max: (max: number, message: string | undefined = undefined) => (value: number) => value <= max || (message ?? $tr("ui.rules.time-max", "Must be less than {0}", getTimeBestString(max)))
66
67
  };
67
68
 
69
+ export const TimeStepRules = {
70
+ required: (message: string | undefined = undefined) => (value: { value: number, unit: TimeUnit } | null) => (!!value && value.value !== 0) || (message ?? $tr("ui.rules.required", "Required")),
71
+ }
72
+
68
73
  export const ToggleRules = {
69
74
  required: (message: string | undefined = undefined) => (value: boolean) => value || (message ?? $tr("ui.rules.required", "Required"))
70
75
  };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@dative-gpi/foundation-shared-components",
3
3
  "sideEffects": false,
4
- "version": "1.0.22",
4
+ "version": "1.0.23",
5
5
  "description": "",
6
6
  "publishConfig": {
7
7
  "access": "public"
@@ -10,8 +10,8 @@
10
10
  "author": "",
11
11
  "license": "ISC",
12
12
  "dependencies": {
13
- "@dative-gpi/foundation-shared-domain": "1.0.22",
14
- "@dative-gpi/foundation-shared-services": "1.0.22"
13
+ "@dative-gpi/foundation-shared-domain": "1.0.23",
14
+ "@dative-gpi/foundation-shared-services": "1.0.23"
15
15
  },
16
16
  "peerDependencies": {
17
17
  "@dative-gpi/bones-ui": "^0.0.75",
@@ -35,5 +35,5 @@
35
35
  "sass": "1.71.1",
36
36
  "sass-loader": "13.3.2"
37
37
  },
38
- "gitHead": "21879f2f17123f2f50adccafeae5fe773584e0c2"
38
+ "gitHead": "8e55646ddbc288420407b5a2f423a32699fb5459"
39
39
  }
package/utils/time.ts CHANGED
@@ -14,7 +14,18 @@ export const timeSteps = [
14
14
  { id: TimeUnit.Year, label: $tr("ui.time-step.year.singular", "Year"), plural: $tr("ui.time-step.year.plural", "Years") },
15
15
  ]
16
16
 
17
+ export const timeStepToString = (value: { value: number, unit: TimeUnit } | null): string => {
18
+ if (!value) {
19
+ return "";
20
+ }
17
21
 
22
+ const unit = timeSteps.find(step => step.id === value.unit);
23
+ if (!unit) {
24
+ return "";
25
+ }
26
+
27
+ return `${value.value} ${value.value === 1 ? unit.label.toLowerCase() : unit.plural.toLowerCase()}`;
28
+ }
18
29
 
19
30
  // TODO : remove everything below this line
20
31
  export const timeScale: any[] = [