-
Notifications
You must be signed in to change notification settings - Fork 185
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
feat(DateInput): add placeholder prop #8168
base: master
Are you sure you want to change the base?
feat(DateInput): add placeholder prop #8168
Conversation
This pull request is automatically built and testable in CodeSandbox. To see build info of the built libraries, click here or the icon next to each commit SHA. |
size-limit report 📦
|
e2e tests |
👀 Docs deployed
Commit 995627f |
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## master #8168 +/- ##
==========================================
+ Coverage 95.49% 95.50% +0.01%
==========================================
Files 403 403
Lines 11456 11460 +4
Branches 3781 3784 +3
==========================================
+ Hits 10940 10945 +5
+ Misses 516 515 -1
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Sentry. |
# Conflicts: # packages/vkui/src/components/DateInput/__image_snapshots__/dateinput-android-chromium-dark-1-snap.png # packages/vkui/src/components/DateInput/__image_snapshots__/dateinput-android-chromium-light-1-snap.png # packages/vkui/src/components/DateInput/__image_snapshots__/dateinput-ios-webkit-dark-1-snap.png # packages/vkui/src/components/DateInput/__image_snapshots__/dateinput-ios-webkit-light-1-snap.png # packages/vkui/src/components/DateInput/__image_snapshots__/dateinput-vkcom-chromium-dark-1-snap.png # packages/vkui/src/components/DateInput/__image_snapshots__/dateinput-vkcom-chromium-light-1-snap.png # packages/vkui/src/components/DateInput/__image_snapshots__/dateinput-vkcom-firefox-dark-1-snap.png # packages/vkui/src/components/DateInput/__image_snapshots__/dateinput-vkcom-firefox-light-1-snap.png # packages/vkui/src/components/DateInput/__image_snapshots__/dateinput-vkcom-webkit-dark-1-snap.png # packages/vkui/src/components/DateInput/__image_snapshots__/dateinput-vkcom-webkit-light-1-snap.png
-webkit-user-select: none; | ||
-moz-user-select: none; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
-webkit-user-select: none; | |
-moz-user-select: none; |
автопрефиксер сам выставит
/** | ||
* Текст, который будет отображаться в пустом поле ввода | ||
*/ | ||
placeholder?: string; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
placeholder
всё же должен означать, что ничего не задано и быть тусклого цвета 🤔 сейчас placholder
это считай это __.__.___
учитывая, что ребятам хочется значение по умолчанию, то тут нужен defaulValue
куда нужно будет передать текущую дату (если рассматривать их задачу), а чтобы вместо даты был текст, нужен 2-ой параметр и тут два решения:
Graceful degradation – relativeTimeFormat
Note
Не везде поддерживается https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/RelativeTimeFormat/formatToParts
const rtf = new Intl.RelativeTimeFormat('ru', { numeric: "auto" });
console.log(rtf.formatToParts(0, "second")[0].value);
type RelativeTimeFormat = { value: number, unit: "year" | "quarter" | "month" | "week" | "day" | "hour" | "minute" | "second" };
локаль берём из контекста const { locale } = useConfigProvider();
Progressive enhancement – renderValue()
или
renderDate()
type RenderValue = (date: Date) => string | number | React.ReactElement;
const today = Date.now();
const App = () => {
const [value, setValue] = React.useState();
return (
<DateInput
defaultValue={today}
renderValue={value === undefined ? (() => 'Сейчас') : undefined}
/>
);
};
или
type RenderValue = (date: Date) => undefined | string | number | React.ReactElement;
const today = Date.now();
const App = () => {
const [value, setValue] = React.useState();
return (
<DateInput
defaultValue={today}
renderValue={(date) => value === undefined && isToday(date) ? 'Сейчас' : undefined}
/>
);
};
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍 решил сделать вторым способом, так как это более гибко. Добавил свойство renderCustomValue
, с помощью которого можно настроить отображение
Описание
Нужно добавить отображение
placeholder
- текст, который будет отображаться при пустом значенииvalue
Изменения
renderCustomValue
, которое позволяет отрендерить кастомный текст в зависимости от значения в полеRelease notes
Улучшения
renderCustomValue
, которое позволяет отрендерить кастомный текст в зависимости от значения в поле