fuma 0.3.60 → 0.4.1
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.
- package/dist/ui/form/Form.svelte +1 -1
- package/dist/ui/index.d.ts +1 -1
- package/dist/ui/index.js +1 -1
- package/dist/ui/{period/PeriodPicker.svelte → range/RangePicker.svelte} +13 -9
- package/dist/ui/range/RangePicker.svelte.d.ts +24 -0
- package/dist/ui/{period/PeriodPickerButton.svelte → range/RangePickerButton.svelte} +19 -17
- package/dist/ui/range/RangePickerButton.svelte.d.ts +21 -0
- package/dist/ui/range/format.d.ts +4 -0
- package/dist/ui/range/format.js +48 -0
- package/dist/ui/range/index.d.ts +4 -0
- package/dist/ui/range/index.js +4 -0
- package/dist/ui/range/types.d.ts +10 -0
- package/dist/ui/range/types.js +1 -0
- package/dist/ui/table/head/TableHeadDate.svelte +13 -14
- package/dist/utils/index.d.ts +0 -1
- package/dist/utils/index.js +0 -1
- package/dist/validation/form.d.ts +1 -0
- package/package.json +1 -1
- package/dist/ui/period/PeriodPicker.svelte.d.ts +0 -22
- package/dist/ui/period/PeriodPickerButton.svelte.d.ts +0 -14
- package/dist/ui/period/index.d.ts +0 -6
- package/dist/ui/period/index.js +0 -2
- package/dist/utils/formatRange.d.ts +0 -8
- package/dist/utils/formatRange.js +0 -41
package/dist/ui/form/Form.svelte
CHANGED
|
@@ -81,7 +81,7 @@ function getActionPadding() {
|
|
|
81
81
|
if (container === "drawer")
|
|
82
82
|
return "bottom-0 -ml-8 -mr-4 pl-8 pr-4";
|
|
83
83
|
if (container === "card")
|
|
84
|
-
return "
|
|
84
|
+
return "bottom-0 -mx-2 sm:-mx-8 px-2 sm:px-8";
|
|
85
85
|
if (container === "dialog")
|
|
86
86
|
return "-bottom-4 -mx-4 px-4";
|
|
87
87
|
return "bottom-0";
|
package/dist/ui/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ export * from './drawer/index.js';
|
|
|
3
3
|
export * from './input/index.js';
|
|
4
4
|
export * from './form/index.js';
|
|
5
5
|
export * from './menu/index.js';
|
|
6
|
-
export * from './
|
|
6
|
+
export * from './range/index.js';
|
|
7
7
|
export * from './table/index.js';
|
|
8
8
|
export * from './tabs/index.js';
|
|
9
9
|
export * from './button/index.js';
|
package/dist/ui/index.js
CHANGED
|
@@ -3,7 +3,7 @@ export * from './drawer/index.js';
|
|
|
3
3
|
export * from './input/index.js';
|
|
4
4
|
export * from './form/index.js';
|
|
5
5
|
export * from './menu/index.js';
|
|
6
|
-
export * from './
|
|
6
|
+
export * from './range/index.js';
|
|
7
7
|
export * from './table/index.js';
|
|
8
8
|
export * from './tabs/index.js';
|
|
9
9
|
export * from './button/index.js';
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
<script>import { onMount, onDestroy, createEventDispatcher } from "svelte";
|
|
2
|
+
import dayjs from "dayjs";
|
|
2
3
|
export let numberOfMonths = 3;
|
|
3
4
|
export let numberOfColumns = numberOfMonths;
|
|
4
5
|
export let showWeekNumbers = true;
|
|
5
|
-
export let
|
|
6
|
+
export let range = void 0;
|
|
7
|
+
export let minDate = void 0;
|
|
8
|
+
export let maxDate = void 0;
|
|
6
9
|
let startElement;
|
|
7
10
|
let endElement;
|
|
8
11
|
let picker;
|
|
@@ -29,20 +32,21 @@ async function initTimePicker() {
|
|
|
29
32
|
numberOfMonths,
|
|
30
33
|
numberOfColumns,
|
|
31
34
|
showWeekNumbers,
|
|
32
|
-
|
|
33
|
-
|
|
35
|
+
minDate,
|
|
36
|
+
maxDate,
|
|
37
|
+
startDate: range?.start ? dayjs(range.start).toDate() : void 0,
|
|
38
|
+
endDate: range?.end ? dayjs(range.end).toDate() : void 0,
|
|
34
39
|
setup: (picker2) => {
|
|
35
40
|
picker2.on("selected", (date1, date2) => {
|
|
36
|
-
|
|
37
|
-
period = {
|
|
41
|
+
range = {
|
|
38
42
|
start: /* @__PURE__ */ new Date(
|
|
39
|
-
`${getAbsoluteDate(date1.dateInstance)}T${getAbsoluteTime(
|
|
43
|
+
`${getAbsoluteDate(date1.dateInstance)}T${getAbsoluteTime(range?.start)}`
|
|
40
44
|
),
|
|
41
45
|
end: /* @__PURE__ */ new Date(
|
|
42
|
-
`${getAbsoluteDate(date2.dateInstance)}T${getAbsoluteTime(
|
|
46
|
+
`${getAbsoluteDate(date2.dateInstance)}T${getAbsoluteTime(range?.end, "23:59:00")}`
|
|
43
47
|
)
|
|
44
48
|
};
|
|
45
|
-
dispatch("change",
|
|
49
|
+
dispatch("change", range);
|
|
46
50
|
});
|
|
47
51
|
}
|
|
48
52
|
});
|
|
@@ -51,7 +55,7 @@ const getAbsoluteDate = (date) => [date.getFullYear(), date.getMonth() + 1, date
|
|
|
51
55
|
const getAbsoluteTime = (date, defaultTime = "00:00:00") => {
|
|
52
56
|
if (!date)
|
|
53
57
|
return defaultTime;
|
|
54
|
-
return
|
|
58
|
+
return dayjs(date).format("HH:mm:ss");
|
|
55
59
|
};
|
|
56
60
|
</script>
|
|
57
61
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
import type { Range } from './types.js';
|
|
3
|
+
declare const __propDef: {
|
|
4
|
+
props: {
|
|
5
|
+
numberOfMonths?: number | undefined;
|
|
6
|
+
numberOfColumns?: number | undefined;
|
|
7
|
+
showWeekNumbers?: boolean | undefined;
|
|
8
|
+
range?: Range | undefined;
|
|
9
|
+
minDate?: Date | number | string | undefined;
|
|
10
|
+
maxDate?: Date | number | string | undefined;
|
|
11
|
+
};
|
|
12
|
+
events: {
|
|
13
|
+
change: CustomEvent<Range>;
|
|
14
|
+
} & {
|
|
15
|
+
[evt: string]: CustomEvent<any>;
|
|
16
|
+
};
|
|
17
|
+
slots: {};
|
|
18
|
+
};
|
|
19
|
+
export type RangePickerProps = typeof __propDef.props;
|
|
20
|
+
export type RangePickerEvents = typeof __propDef.events;
|
|
21
|
+
export type RangePickerSlots = typeof __propDef.slots;
|
|
22
|
+
export default class RangePicker extends SvelteComponent<RangePickerProps, RangePickerEvents, RangePickerSlots> {
|
|
23
|
+
}
|
|
24
|
+
export {};
|
|
@@ -1,26 +1,28 @@
|
|
|
1
1
|
<script>import { mdiCalendarMonthOutline, mdiClose } from "@mdi/js";
|
|
2
|
+
import dayjs from "dayjs";
|
|
2
3
|
import { goto } from "$app/navigation";
|
|
3
4
|
import { page } from "$app/stores";
|
|
4
5
|
import { urlParam } from "../../store/param.js";
|
|
5
|
-
import { formatRange } from "
|
|
6
|
+
import { formatRange } from "./format.js";
|
|
6
7
|
import { Icon } from "../icon/index.js";
|
|
7
8
|
import { DropDown } from "../menu/index.js";
|
|
8
9
|
import { InputTime } from "../input/index.js";
|
|
9
|
-
import {
|
|
10
|
-
|
|
10
|
+
import { RangePicker } from "./index.js";
|
|
11
|
+
export let minDate = void 0;
|
|
12
|
+
export let maxDate = void 0;
|
|
11
13
|
let dropDown;
|
|
12
14
|
const start = $page.url.searchParams.get("start");
|
|
13
15
|
const end = $page.url.searchParams.get("end");
|
|
14
|
-
let
|
|
16
|
+
export let range = {
|
|
15
17
|
start: start ? new Date(start) : null,
|
|
16
18
|
end: end ? new Date(end) : null
|
|
17
19
|
};
|
|
18
20
|
$:
|
|
19
|
-
isValidPeriod = !!
|
|
20
|
-
function getLabel(
|
|
21
|
-
if (!
|
|
21
|
+
isValidPeriod = !!range.start && !!range.end;
|
|
22
|
+
function getLabel(_range) {
|
|
23
|
+
if (!_range || !_range.start || !_range.end)
|
|
22
24
|
return "P\xE9riodes";
|
|
23
|
-
return formatRange(
|
|
25
|
+
return formatRange(_range);
|
|
24
26
|
}
|
|
25
27
|
function handleSubmit() {
|
|
26
28
|
dropDown.hide();
|
|
@@ -28,15 +30,15 @@ function handleSubmit() {
|
|
|
28
30
|
return;
|
|
29
31
|
goto(
|
|
30
32
|
$urlParam.with({
|
|
31
|
-
start: dayjs(
|
|
32
|
-
end: dayjs(
|
|
33
|
+
start: dayjs(range.start).format("HH:mm"),
|
|
34
|
+
end: dayjs(range.end).format("HH:mm")
|
|
33
35
|
}),
|
|
34
36
|
{ replaceState: true, noScroll: true }
|
|
35
37
|
);
|
|
36
38
|
}
|
|
37
39
|
function handleReset() {
|
|
38
40
|
dropDown.hide();
|
|
39
|
-
|
|
41
|
+
range = { start: null, end: null };
|
|
40
42
|
goto($urlParam.without("start", "end"), { replaceState: true, noScroll: true });
|
|
41
43
|
}
|
|
42
44
|
</script>
|
|
@@ -45,7 +47,7 @@ function handleReset() {
|
|
|
45
47
|
<div slot="activator" class="join">
|
|
46
48
|
<button class="btn join-item btn-sm shrink flex-nowrap">
|
|
47
49
|
<Icon path={mdiCalendarMonthOutline} class="opacity-60" size={20} />
|
|
48
|
-
{getLabel(
|
|
50
|
+
{getLabel(range)}
|
|
49
51
|
</button>
|
|
50
52
|
{#if isValidPeriod}
|
|
51
53
|
<button class="btn btn-square join-item btn-sm" on:click|preventDefault={handleReset}>
|
|
@@ -55,14 +57,14 @@ function handleReset() {
|
|
|
55
57
|
</div>
|
|
56
58
|
|
|
57
59
|
<form class="flex flex-col" on:submit|preventDefault={handleSubmit} data-sveltekit-replacestate>
|
|
58
|
-
<
|
|
60
|
+
<RangePicker numberOfMonths={1} bind:range {minDate} {maxDate} />
|
|
59
61
|
|
|
60
|
-
<input class="hidden" type="text" name="start" value={
|
|
61
|
-
<input class="hidden" type="text" name="end" value={
|
|
62
|
+
<input class="hidden" type="text" name="start" value={range.start?.toJSON()} />
|
|
63
|
+
<input class="hidden" type="text" name="end" value={range.end?.toJSON()} />
|
|
62
64
|
|
|
63
65
|
<div class="flex gap-2 p-2">
|
|
64
|
-
<InputTime label="A partir de" bind:value={
|
|
65
|
-
<InputTime label="Jusqu'à" bind:value={
|
|
66
|
+
<InputTime label="A partir de" bind:value={range.start} enhanceDisabled class="grow" />
|
|
67
|
+
<InputTime label="Jusqu'à" bind:value={range.end} enhanceDisabled class="grow" />
|
|
66
68
|
</div>
|
|
67
69
|
<button class="btn m-2"> Valider </button>
|
|
68
70
|
</form>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { SvelteComponent } from "svelte";
|
|
2
|
+
declare const __propDef: {
|
|
3
|
+
props: {
|
|
4
|
+
minDate?: Date | number | string | undefined;
|
|
5
|
+
maxDate?: Date | number | string | undefined;
|
|
6
|
+
range?: {
|
|
7
|
+
start: Date | null;
|
|
8
|
+
end: Date | null;
|
|
9
|
+
} | undefined;
|
|
10
|
+
};
|
|
11
|
+
events: {
|
|
12
|
+
[evt: string]: CustomEvent<any>;
|
|
13
|
+
};
|
|
14
|
+
slots: {};
|
|
15
|
+
};
|
|
16
|
+
export type RangePickerButtonProps = typeof __propDef.props;
|
|
17
|
+
export type RangePickerButtonEvents = typeof __propDef.events;
|
|
18
|
+
export type RangePickerButtonSlots = typeof __propDef.slots;
|
|
19
|
+
export default class RangePickerButton extends SvelteComponent<RangePickerButtonProps, RangePickerButtonEvents, RangePickerButtonSlots> {
|
|
20
|
+
}
|
|
21
|
+
export {};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Range } from './types.js';
|
|
2
|
+
export declare const formatRange: (range?: Range, placeholder?: string) => string;
|
|
3
|
+
export declare const formatRangeShort: (range: Range, placeholder?: string) => string | undefined;
|
|
4
|
+
export declare const formatRangeHour: (range: Range, placeholder?: string) => string;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import dayjs from 'dayjs';
|
|
2
|
+
const formater = new Intl.DateTimeFormat('fr-ch', {
|
|
3
|
+
weekday: 'long',
|
|
4
|
+
day: 'numeric',
|
|
5
|
+
month: 'numeric',
|
|
6
|
+
year: '2-digit',
|
|
7
|
+
hour: 'numeric',
|
|
8
|
+
minute: 'numeric',
|
|
9
|
+
timeZone: 'Europe/Zurich'
|
|
10
|
+
});
|
|
11
|
+
const formaterShort = new Intl.DateTimeFormat('fr-ch', {
|
|
12
|
+
weekday: 'short',
|
|
13
|
+
hour: 'numeric',
|
|
14
|
+
minute: 'numeric',
|
|
15
|
+
timeZone: 'Europe/Zurich'
|
|
16
|
+
});
|
|
17
|
+
function isRequiredRange(range) {
|
|
18
|
+
if (!range)
|
|
19
|
+
return false;
|
|
20
|
+
return (range.start !== null &&
|
|
21
|
+
range.start !== undefined &&
|
|
22
|
+
range.end !== null &&
|
|
23
|
+
range.end !== undefined);
|
|
24
|
+
}
|
|
25
|
+
export const formatRange = (range, placeholder = '') => {
|
|
26
|
+
dayjs();
|
|
27
|
+
if (!isRequiredRange(range))
|
|
28
|
+
return placeholder;
|
|
29
|
+
const start = dayjs(range.start).toDate();
|
|
30
|
+
const end = dayjs(range.end).toDate();
|
|
31
|
+
return formater.formatRange(start, end);
|
|
32
|
+
};
|
|
33
|
+
export const formatRangeShort = (range, placeholder = '') => {
|
|
34
|
+
if (!isRequiredRange(range))
|
|
35
|
+
return placeholder;
|
|
36
|
+
const start = dayjs(range.start).toDate();
|
|
37
|
+
const end = dayjs(range.end).toDate();
|
|
38
|
+
formaterShort.formatRange(start, end);
|
|
39
|
+
};
|
|
40
|
+
export const formatRangeHour = (range, placeholder = '') => {
|
|
41
|
+
if (!isRequiredRange(range))
|
|
42
|
+
return placeholder;
|
|
43
|
+
const start = dayjs(range.start);
|
|
44
|
+
const end = dayjs(range.end);
|
|
45
|
+
if (start.isSame(end))
|
|
46
|
+
return start.format('HH:mm');
|
|
47
|
+
return [start.format('HH:mm'), end.format('HH:mm')].join(' – ');
|
|
48
|
+
};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import dayjs, { type ConfigType } from 'dayjs';
|
|
2
|
+
export type RangeDate = ConfigType;
|
|
3
|
+
export type Range = {
|
|
4
|
+
start: RangeDate;
|
|
5
|
+
end: RangeDate;
|
|
6
|
+
};
|
|
7
|
+
export type RangeRequired = {
|
|
8
|
+
start: string | number | Date | dayjs.Dayjs;
|
|
9
|
+
end: string | number | Date | dayjs.Dayjs;
|
|
10
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import dayjs, {} from 'dayjs';
|
|
@@ -3,24 +3,23 @@ import { page } from "$app/stores";
|
|
|
3
3
|
import { mdiCalendarFilterOutline } from "@mdi/js";
|
|
4
4
|
import { DropDown } from "../../menu/index.js";
|
|
5
5
|
import { InputTime } from "../../input/index.js";
|
|
6
|
-
import { formatRange } from "
|
|
7
|
-
import {
|
|
6
|
+
import { formatRange } from "../../range/format.js";
|
|
7
|
+
import { RangePicker } from "../../range/index.js";
|
|
8
8
|
import { urlParam } from "../../../store/param.js";
|
|
9
9
|
import { jsonParse } from "../../../utils/jsonParse.js";
|
|
10
10
|
import { Icon } from "../../icon/index.js";
|
|
11
|
-
import dayjs from "dayjs";
|
|
12
11
|
export let field;
|
|
13
12
|
let dropDown;
|
|
14
13
|
const initialValue = jsonParse(
|
|
15
14
|
$page.url.searchParams.get(field.key),
|
|
16
15
|
{}
|
|
17
16
|
);
|
|
18
|
-
let
|
|
17
|
+
let range = {
|
|
19
18
|
start: initialValue.start ? new Date(initialValue.start) : null,
|
|
20
19
|
end: initialValue.end ? new Date(initialValue.end) : null
|
|
21
20
|
};
|
|
22
21
|
$:
|
|
23
|
-
isValidPeriod = !!
|
|
22
|
+
isValidPeriod = !!range.start && !!range.end;
|
|
24
23
|
function handleSubmit() {
|
|
25
24
|
dropDown.hide();
|
|
26
25
|
if (!isValidPeriod)
|
|
@@ -29,8 +28,8 @@ function handleSubmit() {
|
|
|
29
28
|
$urlParam.with(
|
|
30
29
|
{
|
|
31
30
|
[field.key]: JSON.stringify({
|
|
32
|
-
start:
|
|
33
|
-
end:
|
|
31
|
+
start: range.start?.toJSON(),
|
|
32
|
+
end: range.end?.toJSON()
|
|
34
33
|
})
|
|
35
34
|
},
|
|
36
35
|
"skip",
|
|
@@ -41,7 +40,7 @@ function handleSubmit() {
|
|
|
41
40
|
}
|
|
42
41
|
function handleReset() {
|
|
43
42
|
dropDown.hide();
|
|
44
|
-
|
|
43
|
+
range = { start: null, end: null };
|
|
45
44
|
goto($urlParam.without(field.key, "skip", "take"), { replaceState: true, noScroll: true });
|
|
46
45
|
}
|
|
47
46
|
</script>
|
|
@@ -63,7 +62,7 @@ function handleReset() {
|
|
|
63
62
|
|
|
64
63
|
{#if isValidPeriod}
|
|
65
64
|
<span class="badge badge-primary badge-xs text-[0.7rem] font-normal text-white">
|
|
66
|
-
{formatRange(
|
|
65
|
+
{formatRange(range)}
|
|
67
66
|
</span>
|
|
68
67
|
{/if}
|
|
69
68
|
</button>
|
|
@@ -73,14 +72,14 @@ function handleReset() {
|
|
|
73
72
|
on:submit|preventDefault={handleSubmit}
|
|
74
73
|
data-sveltekit-replacestate
|
|
75
74
|
>
|
|
76
|
-
<
|
|
75
|
+
<RangePicker numberOfMonths={1} bind:range />
|
|
77
76
|
|
|
78
|
-
<input class="hidden" type="text" name="start" value={
|
|
79
|
-
<input class="hidden" type="text" name="end" value={
|
|
77
|
+
<input class="hidden" type="text" name="start" value={range.start?.toJSON()} />
|
|
78
|
+
<input class="hidden" type="text" name="end" value={range.end?.toJSON()} />
|
|
80
79
|
|
|
81
80
|
<div class="m-2 flex gap-2">
|
|
82
|
-
<InputTime label="A partir de" bind:value={
|
|
83
|
-
<InputTime label="Jusqu'à" bind:value={
|
|
81
|
+
<InputTime label="A partir de" bind:value={range.start} enhanceDisabled class="grow" />
|
|
82
|
+
<InputTime label="Jusqu'à" bind:value={range.end} enhanceDisabled class="grow" />
|
|
84
83
|
</div>
|
|
85
84
|
|
|
86
85
|
<div class="m-2 flex flex-row-reverse gap-2">
|
package/dist/utils/index.d.ts
CHANGED
package/dist/utils/index.js
CHANGED
|
@@ -21,6 +21,7 @@ export type UseFormOptions<ReturnData> = {
|
|
|
21
21
|
successUpdate?: BooleanOrFunction;
|
|
22
22
|
successReset?: BooleanOrFunction;
|
|
23
23
|
successMessage?: SuccessMessage;
|
|
24
|
+
submitOnChange?: boolean;
|
|
24
25
|
};
|
|
25
26
|
export declare function useForm<ReturnData extends Record<string, unknown>>({ onSubmit, onSuccess, onResetError, onError, onFail, successUpdate, successReset, successMessage }?: UseFormOptions<ReturnData>): {
|
|
26
27
|
enhance: (form: HTMLFormElement) => {
|
package/package.json
CHANGED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { SvelteComponent } from "svelte";
|
|
2
|
-
import type { Period } from './index.js';
|
|
3
|
-
declare const __propDef: {
|
|
4
|
-
props: {
|
|
5
|
-
numberOfMonths?: number | undefined;
|
|
6
|
-
numberOfColumns?: number | undefined;
|
|
7
|
-
showWeekNumbers?: boolean | undefined;
|
|
8
|
-
period?: Period | undefined;
|
|
9
|
-
};
|
|
10
|
-
events: {
|
|
11
|
-
change: CustomEvent<Period>;
|
|
12
|
-
} & {
|
|
13
|
-
[evt: string]: CustomEvent<any>;
|
|
14
|
-
};
|
|
15
|
-
slots: {};
|
|
16
|
-
};
|
|
17
|
-
export type PeriodPickerProps = typeof __propDef.props;
|
|
18
|
-
export type PeriodPickerEvents = typeof __propDef.events;
|
|
19
|
-
export type PeriodPickerSlots = typeof __propDef.slots;
|
|
20
|
-
export default class PeriodPicker extends SvelteComponent<PeriodPickerProps, PeriodPickerEvents, PeriodPickerSlots> {
|
|
21
|
-
}
|
|
22
|
-
export {};
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { SvelteComponent } from "svelte";
|
|
2
|
-
declare const __propDef: {
|
|
3
|
-
props: Record<string, never>;
|
|
4
|
-
events: {
|
|
5
|
-
[evt: string]: CustomEvent<any>;
|
|
6
|
-
};
|
|
7
|
-
slots: {};
|
|
8
|
-
};
|
|
9
|
-
export type PeriodPickerButtonProps = typeof __propDef.props;
|
|
10
|
-
export type PeriodPickerButtonEvents = typeof __propDef.events;
|
|
11
|
-
export type PeriodPickerButtonSlots = typeof __propDef.slots;
|
|
12
|
-
export default class PeriodPickerButton extends SvelteComponent<PeriodPickerButtonProps, PeriodPickerButtonEvents, PeriodPickerButtonSlots> {
|
|
13
|
-
}
|
|
14
|
-
export {};
|
package/dist/ui/period/index.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
type Range = {
|
|
2
|
-
start?: Date | number | null;
|
|
3
|
-
end?: Date | number | null;
|
|
4
|
-
};
|
|
5
|
-
export declare const formatRange: (range: Range) => string;
|
|
6
|
-
export declare const formatRangeShort: (range: Range) => "" | undefined;
|
|
7
|
-
export declare const formatRangeHour: (range: Range) => string;
|
|
8
|
-
export {};
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
import dayjs from 'dayjs';
|
|
2
|
-
const formater = new Intl.DateTimeFormat('fr-ch', {
|
|
3
|
-
weekday: 'long',
|
|
4
|
-
day: 'numeric',
|
|
5
|
-
month: 'numeric',
|
|
6
|
-
year: '2-digit',
|
|
7
|
-
hour: 'numeric',
|
|
8
|
-
minute: 'numeric',
|
|
9
|
-
timeZone: 'Europe/Zurich'
|
|
10
|
-
});
|
|
11
|
-
const formaterShort = new Intl.DateTimeFormat('fr-ch', {
|
|
12
|
-
weekday: 'short',
|
|
13
|
-
hour: 'numeric',
|
|
14
|
-
minute: 'numeric',
|
|
15
|
-
timeZone: 'Europe/Zurich'
|
|
16
|
-
});
|
|
17
|
-
function isRequiredRange(range) {
|
|
18
|
-
return (range.start !== null &&
|
|
19
|
-
range.start !== undefined &&
|
|
20
|
-
range.end !== null &&
|
|
21
|
-
range.end !== undefined);
|
|
22
|
-
}
|
|
23
|
-
export const formatRange = (range) => {
|
|
24
|
-
if (!isRequiredRange(range))
|
|
25
|
-
return '';
|
|
26
|
-
return formater.formatRange(range.start, range.end);
|
|
27
|
-
};
|
|
28
|
-
export const formatRangeShort = (range) => {
|
|
29
|
-
if (!isRequiredRange(range))
|
|
30
|
-
return '';
|
|
31
|
-
formaterShort.formatRange(range.start, range.end);
|
|
32
|
-
};
|
|
33
|
-
export const formatRangeHour = (range) => {
|
|
34
|
-
if (!isRequiredRange(range))
|
|
35
|
-
return '';
|
|
36
|
-
const _start = dayjs(range.start);
|
|
37
|
-
const _end = dayjs(range.end);
|
|
38
|
-
if (_start.isSame(_end))
|
|
39
|
-
return _start.format('HH:mm');
|
|
40
|
-
return [_start.format('HH:mm'), _end.format('HH:mm')].join(' – ');
|
|
41
|
-
};
|