Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Datepicker figma-synk + week oppdatering #2311

Merged
merged 30 commits into from
Sep 26, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
b2e6b01
:art: Standalone-demo
KenAJoh Sep 24, 2023
e8ff1c0
:lipstick: Caption order
KenAJoh Sep 24, 2023
0f85151
:art: Datepicker-button default sizes
KenAJoh Sep 24, 2023
25f5676
:lipstick: Button-sizes
KenAJoh Sep 24, 2023
ea3e1a6
:art: Weeknumber
KenAJoh Sep 24, 2023
79e29d3
:sparkles: add AsChild to show/hide
JulianNymark Sep 25, 2023
6c8785e
:art: clickable week
KenAJoh Sep 25, 2023
3e72a17
:art: Table-code for header
KenAJoh Sep 25, 2023
4964cdd
Merge asChild-branch into datepicker
KenAJoh Sep 25, 2023
64c7a89
:lipstick: Stylet weekPicker
KenAJoh Sep 25, 2023
d74ba28
:truck: Flyttet parts
KenAJoh Sep 25, 2023
2e78133
:truck: Flyttet parts og dokumentert src
KenAJoh Sep 25, 2023
7f6ad92
:art: fixedWeeks er nå default false på standalone
KenAJoh Sep 25, 2023
cd27824
:label: Types for onWeekDayClick
KenAJoh Sep 25, 2023
d6afc71
:art: WeekDayClick demo
KenAJoh Sep 25, 2023
a4ccff5
:art: Bedre skjermleserstøtte for ukerad
KenAJoh Sep 25, 2023
b5370e8
:art: Weekdayclick only on multiple mode
KenAJoh Sep 26, 2023
380a89e
:art: Monthpicker button size
KenAJoh Sep 26, 2023
2e51069
:memo: changeset
KenAJoh Sep 26, 2023
caedcbd
Update @navikt/core/react/src/date/datepicker/parts/Row.tsx
KenAJoh Sep 26, 2023
b2aab1a
Update @navikt/core/react/src/date/utils/labels.ts
KenAJoh Sep 26, 2023
5b88b2a
:bug: Riktig warning ved bruk av feil mode
KenAJoh Sep 26, 2023
bb27e0b
:art: Riktige parts i standalone og vanlig versjon
KenAJoh Sep 26, 2023
2eca3d2
:art: fjernet onWeekNumberClick for riktig mode
KenAJoh Sep 26, 2023
5f1b217
:wheelchair: Bedre labels for next/preview knapper
KenAJoh Sep 26, 2023
1792cc5
:label: Oppdatert types
KenAJoh Sep 26, 2023
2850615
:memo: Minor-update for datepicker + weekNumberClick
KenAJoh Sep 26, 2023
3380f52
Merge main -> datepicker-design
KenAJoh Sep 26, 2023
10cd396
Merge main -> datepicker-design
KenAJoh Sep 26, 2023
af42404
:recycle: EventHandling for datepicker
KenAJoh Sep 26, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/serious-bears-cough.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@navikt/ds-react": minor
---

Datepicker: Tilbyr nå muligheten til å bruke `onWeekNumberClick`.
5 changes: 5 additions & 0 deletions .changeset/serious-bears-cough2.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@navikt/ds-css": patch
---

Datepicker: Tilpasset padding og sizing på mobil.
5 changes: 5 additions & 0 deletions .changeset/serious-bears-cough3.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@navikt/ds-css": patch
---

MonthPicker: Tilpasset padding og sizing på mobil.
2 changes: 1 addition & 1 deletion @navikt/core/css/config/_mappings.js
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,7 @@ const StyleMappings = {
{
component: "DatePicker",
main: "date.css",
dependencies: [typoCss, "button.css", "popover.css"],
dependencies: [typoCss, primitivesCss, "button.css", "popover.css"],
},
{
component: "MonthPicker",
Expand Down
80 changes: 59 additions & 21 deletions @navikt/core/css/date.css
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
.navds-date {
padding: var(--a-spacing-3);
padding: var(--a-spacing-4) var(--a-spacing-3);
}

.navds-date .rdp-day_range_middle.rdp-day_disabled {
Expand All @@ -23,28 +23,29 @@
}

.navds-date .rdp-weeknumber {
color: var(--ac-date-week-text, var(--a-text-on-neutral));
background: var(--ac-date-week-bg, var(--a-surface-neutral));
font-size: var(--a-font-size-small);
display: flex;
justify-content: center;
align-items: center;
padding: var(--a-spacing-05) var(--a-spacing-1);
border-radius: var(--a-border-radius-small);
justify-content: center;
width: 2rem;
height: 2rem;
border-radius: var(--a-border-radius-medium);
margin: var(--a-spacing-2);
color: var(--a-text-subtle);
}

.navds-date__caption-dropdown {
display: flex;
justify-content: space-between;
gap: var(--a-spacing-2);
align-items: center;
.navds-date .rdp-weeknumber.rdp-button {
width: 2rem;
height: 2rem;
box-shadow: 0 0 0 1px var(--a-border-default);
color: var(--a-text-subtle);
font-size: var(--a-font-size-small);
}

.navds-date__caption__month-wrapper {
display: flex;
justify-content: center;
gap: var(--a-spacing-2);
align-items: center;
.navds-date .rdp-weeknumber.rdp-button:active {
background-color: var(--a-surface-action-active);
color: var(--a-text-on-action);
box-shadow: none;
}

.navds-date__caption__month .navds-select__container select {
Expand All @@ -53,20 +54,21 @@

.navds-date .rdp-button {
all: unset;
display: block;
width: 2.5rem;
height: 2.5rem;
text-align: center;
border-radius: var(--a-border-radius-medium);
}

.navds-date .rdp-day_range_start {
border-radius: var(--a-border-radius-xlarge) var(--a-border-radius-small) var(--a-border-radius-small)
border-radius: var(--a-border-radius-xlarge) var(--a-border-radius-medium) var(--a-border-radius-medium)
var(--a-border-radius-xlarge);
}

.navds-date .rdp-day_range_end:not(.rdp-day_range_start) {
border-radius: var(--a-border-radius-small) var(--a-border-radius-xlarge) var(--a-border-radius-xlarge)
var(--a-border-radius-small);
border-radius: var(--a-border-radius-medium) var(--a-border-radius-xlarge) var(--a-border-radius-xlarge)
var(--a-border-radius-medium);
}

.navds-date .rdp-day_range_start.rdp-day_range_end {
Expand Down Expand Up @@ -102,7 +104,7 @@
all: unset;
text-align: center;
width: 3rem;
height: 2.75rem;
height: 3rem;
text-transform: capitalize;
border-radius: var(--a-border-radius-medium);
cursor: pointer;
Expand Down Expand Up @@ -188,7 +190,8 @@
display: flex;
justify-content: space-between;
align-items: center;
gap: var(--a-spacing-2);
gap: var(--a-spacing-1);
padding-inline: var(--a-spacing-1);
}

.navds-date__caption-button,
Expand Down Expand Up @@ -287,3 +290,38 @@
.navds-date__field--readonly .navds-date__field-button {
cursor: default;
}

.navds-date__caption-button {
width: 2rem;
height: 2rem;
}

.navds-date__week-row {
display: flex;
align-items: center;
gap: var(--a-spacing-05);
}

.navds-date__week-wrapper {
width: 2.5rem;
display: flex;
align-items: center;
justify-content: center;
margin: 0;
}

@media (min-width: 480px) {
.navds-date {
padding: var(--a-spacing-5) var(--a-spacing-4);
}

.navds-date__caption {
gap: var(--a-spacing-2);
}

.navds-date .rdp-button,
.navds-date__caption-button {
width: 3rem;
height: 3rem;
}
}
121 changes: 63 additions & 58 deletions @navikt/core/react/src/date/datepicker/DatePicker.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -5,46 +5,56 @@ import {
DateRange,
DayPicker,
DayPickerBase,
isMatch,
Matcher,
SelectMultipleEventHandler,
SelectRangeEventHandler,
SelectSingleEventHandler,
isMatch,
} from "react-day-picker";
import { omit, Popover, useId } from "../..";
import { Popover, omit, useId } from "../..";
import { DateInputProps, DatePickerInput } from "../DateInput";
import { DateContext } from "../context";
import { getLocaleFromString, labels } from "../utils";
import { Caption, DropdownCaption } from "./caption";
import DatePickerStandalone, {
DatePickerStandaloneType,
} from "./DatePickerStandalone";
import { DayButton } from "./DayButton";
import { TableHead } from "./TableHead";
import Caption from "./parts/Caption";
import DayButton from "./parts/DayButton";
import DropdownCaption from "./parts/DropdownCaption";
import { HeadRow } from "./parts/HeadRow";
import Row from "./parts/Row";
import TableHead from "./parts/TableHead";
import WeekNumber from "./parts/WeekNumber";

export type ConditionalModeProps =
| {
mode?: "single";
onSelect?: (val?: Date) => void;
selected?: Date;
defaultSelected?: Date;
}
| {
mode?: "multiple";
onSelect?: (val?: Date[]) => void;
selected?: Date[];
defaultSelected?: Date[];
min?: number;
max?: number;
}
| {
mode?: "range";
onSelect?: (val?: DateRange) => void;
selected?: DateRange;
defaultSelected?: DateRange;
min?: number;
max?: number;
};
export type SingleMode = {
mode?: "single";
onSelect?: (val?: Date) => void;
selected?: Date;
defaultSelected?: Date;
onWeekNumberClick?: never;
};

export type MultipleMode = {
mode: "multiple";
onSelect?: (val?: Date[]) => void;
selected?: Date[];
defaultSelected?: Date[];
min?: number;
max?: number;
/**
* Allows selecting a week at a time. Only used with mode="multiple".
*/
onWeekNumberClick?: DayPickerBase["onWeekNumberClick"];
};

export type RangeMode = {
mode: "range";
onSelect?: (val?: DateRange) => void;
selected?: DateRange;
defaultSelected?: DateRange;
min?: number;
max?: number;
onWeekNumberClick?: never;
};

type ConditionalModeProps = SingleMode | MultipleMode | RangeMode;

//github.com/gpbl/react-day-picker/blob/50b6dba/packages/react-day-picker/src/types/DayPickerBase.ts#L139
export interface DatePickerDefaultProps
Expand Down Expand Up @@ -186,6 +196,7 @@ export const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(
onOpenToggle,
strategy,
bubbleEscape = false,
onWeekNumberClick,
...rest
},
ref
Expand All @@ -199,33 +210,20 @@ export const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(
Date | Date[] | DateRange | undefined
>(defaultSelected);

const handleSingleSelect: SelectSingleEventHandler = (selectedDay) => {
setSelectedDates(selectedDay);
selectedDay && (onClose?.() ?? setOpen(false));
rest?.onSelect && (rest?.onSelect as (val?: Date) => void)(selectedDay);
};
const mode = rest.mode ?? ("single" as any);

const handleMultipleSelect: SelectMultipleEventHandler = (selectedDays) => {
setSelectedDates(selectedDays);
rest?.onSelect &&
(rest?.onSelect as (val?: Date[]) => void)(selectedDays);
};
/**
* @param selected Date | Date[] | DateRange | undefined
*/
const handleSelect = (selected) => {
setSelectedDates(selected);

const handleRangeSelect: SelectRangeEventHandler = (selectedDays) => {
setSelectedDates(selectedDays);
selectedDays?.from && selectedDays?.to && (onClose?.() ?? setOpen(false));
rest?.onSelect &&
(rest?.onSelect as (val?: DateRange) => void)(selectedDays);
};

const overrideProps = {
mode: rest.mode ?? ("single" as any),
onSelect:
rest?.mode === "single"
? handleSingleSelect
: rest?.mode === "multiple"
? handleMultipleSelect
: handleRangeSelect,
if (rest.mode === "single") {
selected && (onClose?.() ?? setOpen(false));
} else if (rest.mode === "range") {
selected?.from && selected?.to && (onClose?.() ?? setOpen(false));
}
rest?.onSelect?.(selected);
};

return (
Expand Down Expand Up @@ -262,12 +260,16 @@ export const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(
>
<DayPicker
locale={getLocaleFromString(locale)}
{...overrideProps}
mode={mode}
onSelect={handleSelect}
selected={selected ?? selectedDates}
components={{
Caption: dropdownCaption ? DropdownCaption : Caption,
Day: DayButton,
Head: TableHead,
HeadRow,
WeekNumber,
Row,
Day: DayButton,
}}
className={cl("navds-date", className)}
classNames={{
Expand All @@ -289,6 +291,9 @@ export const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(
weekend: "rdp-day__weekend",
}}
showWeekNumber={showWeekNumber}
onWeekNumberClick={
mode === "multiple" ? onWeekNumberClick : undefined
}
fixedWeeks
showOutsideDays
{...omit(rest, ["onSelect"])}
Expand Down
Loading
Loading