update dependencies, fix typescript issues, optimize lodash imports

This commit is contained in:
Amruth Pillai
2023-04-05 09:06:49 +02:00
parent 3a430ad98c
commit 36bf729161
20 changed files with 190 additions and 161 deletions

View File

@ -14,11 +14,11 @@ import {
import { ButtonBase, Divider, Tooltip, useMediaQuery, useTheme } from '@mui/material'; import { ButtonBase, Divider, Tooltip, useMediaQuery, useTheme } from '@mui/material';
import clsx from 'clsx'; import clsx from 'clsx';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { get } from 'lodash'; import get from 'lodash/get';
import { useTranslation } from 'next-i18next'; import { useTranslation } from 'next-i18next';
import toast from 'react-hot-toast'; import toast from 'react-hot-toast';
import { useMutation } from 'react-query'; import { useMutation } from 'react-query';
import { ReactZoomPanPinchRef } from 'react-zoom-pan-pinch'; import { ReactZoomPanPinchHandlers } from 'react-zoom-pan-pinch';
import { ActionCreators } from 'redux-undo'; import { ActionCreators } from 'redux-undo';
import { ServerError } from '@/services/axios'; import { ServerError } from '@/services/axios';
@ -29,7 +29,7 @@ import getResumeUrl from '@/utils/getResumeUrl';
import styles from './ArtboardController.module.scss'; import styles from './ArtboardController.module.scss';
const ArtboardController: React.FC<ReactZoomPanPinchRef> = ({ zoomIn, zoomOut, centerView }) => { const ArtboardController: React.FC<ReactZoomPanPinchHandlers> = ({ zoomIn, zoomOut, centerView }) => {
const { t } = useTranslation(); const { t } = useTranslation();
const theme = useTheme(); const theme = useTheme();

View File

@ -1,5 +1,5 @@
import { Divider, IconButton, SwipeableDrawer, Tooltip, useMediaQuery, useTheme } from '@mui/material'; import { Divider, IconButton, SwipeableDrawer, Tooltip, useMediaQuery, useTheme } from '@mui/material';
import { capitalize } from 'lodash'; import capitalize from 'lodash/capitalize';
import { useTranslation } from 'next-i18next'; import { useTranslation } from 'next-i18next';
import Avatar from '@/components/shared/Avatar'; import Avatar from '@/components/shared/Avatar';

View File

@ -1,5 +1,5 @@
import clsx from 'clsx'; import clsx from 'clsx';
import { isEmpty } from 'lodash'; import isEmpty from 'lodash/isEmpty';
import ReactMarkdown from 'react-markdown'; import ReactMarkdown from 'react-markdown';
import rehypeKatex from 'rehype-katex'; import rehypeKatex from 'rehype-katex';
import remarkGfm from 'remark-gfm'; import remarkGfm from 'remark-gfm';

View File

@ -1,7 +1,6 @@
import { TextField } from '@mui/material'; import { TextField } from '@mui/material';
import { DatePicker } from '@mui/x-date-pickers'; import { DatePicker } from '@mui/x-date-pickers/DatePicker';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { isEmpty } from 'lodash';
import get from 'lodash/get'; import get from 'lodash/get';
import { useEffect, useState } from 'react'; import { useEffect, useState } from 'react';
@ -22,7 +21,6 @@ const ResumeInput: React.FC<Props> = ({ type = 'text', label, path, className, m
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
const stateValue = useAppSelector((state) => get(state.resume.present, path, '')); const stateValue = useAppSelector((state) => get(state.resume.present, path, ''));
const dateFormat = useAppSelector((state) => state.resume.present.metadata.date.format);
useEffect(() => { useEffect(() => {
setValue(stateValue); setValue(stateValue);
@ -57,15 +55,14 @@ const ResumeInput: React.FC<Props> = ({ type = 'text', label, path, className, m
if (type === 'date') { if (type === 'date') {
return ( return (
<DatePicker <DatePicker
showToolbar
openTo="year" openTo="year"
label={label} label={label}
value={value} value={dayjs(value)}
toolbarFormat={dateFormat}
views={['year', 'month', 'day']} views={['year', 'month', 'day']}
renderInput={(params) => <TextField {...params} error={false} className={className} />} slots={{
onChange={(date: Date | null, keyboardInputValue: string | undefined) => { textField: (params) => <TextField {...params} error={false} className={className} />,
isEmpty(keyboardInputValue) && onChangeValue(''); }}
onChange={(date: dayjs.Dayjs | null) => {
date && dayjs(date).isValid() && onChangeValue(dayjs(date).format('YYYY-MM-DD')); date && dayjs(date).isValid() && onChangeValue(dayjs(date).format('YYYY-MM-DD'));
}} }}
/> />

View File

@ -4,7 +4,7 @@ import { Login, Visibility, VisibilityOff } from '@mui/icons-material';
import { Button, IconButton, InputAdornment, TextField } from '@mui/material'; import { Button, IconButton, InputAdornment, TextField } from '@mui/material';
import { CredentialResponse, GoogleLogin } from '@react-oauth/google'; import { CredentialResponse, GoogleLogin } from '@react-oauth/google';
import Joi from 'joi'; import Joi from 'joi';
import { isEmpty } from 'lodash'; import isEmpty from 'lodash/isEmpty';
import { Trans, useTranslation } from 'next-i18next'; import { Trans, useTranslation } from 'next-i18next';
import { useMemo, useState } from 'react'; import { useMemo, useState } from 'react';
import { Controller, useForm } from 'react-hook-form'; import { Controller, useForm } from 'react-hook-form';

View File

@ -4,7 +4,7 @@ import { HowToReg } from '@mui/icons-material';
import { Button, TextField } from '@mui/material'; import { Button, TextField } from '@mui/material';
import { CredentialResponse, GoogleLogin } from '@react-oauth/google'; import { CredentialResponse, GoogleLogin } from '@react-oauth/google';
import Joi from 'joi'; import Joi from 'joi';
import { isEmpty } from 'lodash'; import isEmpty from 'lodash/isEmpty';
import { Trans, useTranslation } from 'next-i18next'; import { Trans, useTranslation } from 'next-i18next';
import { Controller, useForm } from 'react-hook-form'; import { Controller, useForm } from 'react-hook-form';
import toast from 'react-hot-toast'; import toast from 'react-hot-toast';

View File

@ -1,7 +1,7 @@
import { joiResolver } from '@hookform/resolvers/joi'; import { joiResolver } from '@hookform/resolvers/joi';
import { Add, DriveFileRenameOutline } from '@mui/icons-material'; import { Add, DriveFileRenameOutline } from '@mui/icons-material';
import { Button, TextField } from '@mui/material'; import { Button, TextField } from '@mui/material';
import { DatePicker } from '@mui/x-date-pickers'; import { DatePicker } from '@mui/x-date-pickers/DatePicker';
import { Award, SectionPath } from '@reactive-resume/schema'; import { Award, SectionPath } from '@reactive-resume/schema';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import Joi from 'joi'; import Joi from 'joi';
@ -128,21 +128,23 @@ const AwardModal: React.FC = () => {
control={control} control={control}
render={({ field, fieldState }) => ( render={({ field, fieldState }) => (
<DatePicker <DatePicker
{...field}
openTo="year" openTo="year"
inputRef={field.ref}
label={t<string>('builder.common.form.date.label')} label={t<string>('builder.common.form.date.label')}
value={dayjs(field.value)}
views={['year', 'month', 'day']} views={['year', 'month', 'day']}
onChange={(date: Date | null, keyboardInputValue: string | undefined) => { slots={{
isEmpty(keyboardInputValue) && field.onChange(''); textField: (params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || params.inputProps?.placeholder}
/>
),
}}
onChange={(date: dayjs.Dayjs | null) => {
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD')); date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
}} }}
renderInput={(params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || params.inputProps?.placeholder}
/>
)}
/> />
)} )}
/> />

View File

@ -1,7 +1,7 @@
import { joiResolver } from '@hookform/resolvers/joi'; import { joiResolver } from '@hookform/resolvers/joi';
import { Add, DriveFileRenameOutline } from '@mui/icons-material'; import { Add, DriveFileRenameOutline } from '@mui/icons-material';
import { Button, TextField } from '@mui/material'; import { Button, TextField } from '@mui/material';
import { DatePicker } from '@mui/x-date-pickers'; import { DatePicker } from '@mui/x-date-pickers/DatePicker';
import { Certificate, SectionPath } from '@reactive-resume/schema'; import { Certificate, SectionPath } from '@reactive-resume/schema';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import Joi from 'joi'; import Joi from 'joi';
@ -128,21 +128,23 @@ const CertificateModal: React.FC = () => {
control={control} control={control}
render={({ field, fieldState }) => ( render={({ field, fieldState }) => (
<DatePicker <DatePicker
{...field}
openTo="year" openTo="year"
inputRef={field.ref}
label={t<string>('builder.common.form.date.label')} label={t<string>('builder.common.form.date.label')}
value={dayjs(field.value)}
views={['year', 'month', 'day']} views={['year', 'month', 'day']}
onChange={(date: Date | null, keyboardInputValue: string | undefined) => { slots={{
isEmpty(keyboardInputValue) && field.onChange(''); textField: (params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || params.inputProps?.placeholder}
/>
),
}}
onChange={(date: dayjs.Dayjs | null) => {
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD')); date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
}} }}
renderInput={(params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || params.inputProps?.placeholder}
/>
)}
/> />
)} )}
/> />

View File

@ -1,7 +1,7 @@
import { joiResolver } from '@hookform/resolvers/joi'; import { joiResolver } from '@hookform/resolvers/joi';
import { Add, DriveFileRenameOutline } from '@mui/icons-material'; import { Add, DriveFileRenameOutline } from '@mui/icons-material';
import { Button, Slider, TextField } from '@mui/material'; import { Button, Slider, TextField } from '@mui/material';
import { DatePicker } from '@mui/x-date-pickers'; import { DatePicker } from '@mui/x-date-pickers/DatePicker';
import { Custom } from '@reactive-resume/schema'; import { Custom } from '@reactive-resume/schema';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import Joi from 'joi'; import Joi from 'joi';
@ -145,21 +145,23 @@ const CustomModal: React.FC = () => {
control={control} control={control}
render={({ field, fieldState }) => ( render={({ field, fieldState }) => (
<DatePicker <DatePicker
{...field}
openTo="year" openTo="year"
inputRef={field.ref}
label={t<string>('builder.common.form.start-date.label')} label={t<string>('builder.common.form.start-date.label')}
value={dayjs(field.value)}
views={['year', 'month', 'day']} views={['year', 'month', 'day']}
onChange={(date: Date | null, keyboardInputValue: string | undefined) => { slots={{
isEmpty(keyboardInputValue) && field.onChange(''); textField: (params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || params.inputProps?.placeholder}
/>
),
}}
onChange={(date: dayjs.Dayjs | null) => {
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD')); date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
}} }}
renderInput={(params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || params.inputProps?.placeholder}
/>
)}
/> />
)} )}
/> />
@ -169,21 +171,23 @@ const CustomModal: React.FC = () => {
control={control} control={control}
render={({ field, fieldState }) => ( render={({ field, fieldState }) => (
<DatePicker <DatePicker
{...field}
openTo="year" openTo="year"
inputRef={field.ref}
label={t<string>('builder.common.form.end-date.label')} label={t<string>('builder.common.form.end-date.label')}
value={dayjs(field.value)}
views={['year', 'month', 'day']} views={['year', 'month', 'day']}
onChange={(date: Date | null, keyboardInputValue: string | undefined) => { slots={{
isEmpty(keyboardInputValue) && field.onChange(''); textField: (params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || t<string>('builder.common.form.end-date.help-text')}
/>
),
}}
onChange={(date: dayjs.Dayjs | null) => {
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD')); date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
}} }}
renderInput={(params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || 'Leave this field blank, if still present'}
/>
)}
/> />
)} )}
/> />

View File

@ -1,7 +1,7 @@
import { joiResolver } from '@hookform/resolvers/joi'; import { joiResolver } from '@hookform/resolvers/joi';
import { Add, DriveFileRenameOutline } from '@mui/icons-material'; import { Add, DriveFileRenameOutline } from '@mui/icons-material';
import { Button, TextField } from '@mui/material'; import { Button, TextField } from '@mui/material';
import { DatePicker } from '@mui/x-date-pickers'; import { DatePicker } from '@mui/x-date-pickers/DatePicker';
import { Education, SectionPath } from '@reactive-resume/schema'; import { Education, SectionPath } from '@reactive-resume/schema';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import Joi from 'joi'; import Joi from 'joi';
@ -167,21 +167,23 @@ const EducationModal: React.FC = () => {
control={control} control={control}
render={({ field, fieldState }) => ( render={({ field, fieldState }) => (
<DatePicker <DatePicker
{...field}
openTo="year" openTo="year"
inputRef={field.ref}
label={t<string>('builder.common.form.start-date.label')} label={t<string>('builder.common.form.start-date.label')}
value={dayjs(field.value)}
views={['year', 'month', 'day']} views={['year', 'month', 'day']}
onChange={(date: Date | null, keyboardInputValue: string | undefined) => { slots={{
isEmpty(keyboardInputValue) && field.onChange(''); textField: (params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || params.inputProps?.placeholder}
/>
),
}}
onChange={(date: dayjs.Dayjs | null) => {
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD')); date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
}} }}
renderInput={(params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || params.inputProps?.placeholder}
/>
)}
/> />
)} )}
/> />
@ -191,21 +193,23 @@ const EducationModal: React.FC = () => {
control={control} control={control}
render={({ field, fieldState }) => ( render={({ field, fieldState }) => (
<DatePicker <DatePicker
{...field}
openTo="year" openTo="year"
inputRef={field.ref}
label={t<string>('builder.common.form.end-date.label')} label={t<string>('builder.common.form.end-date.label')}
value={dayjs(field.value)}
views={['year', 'month', 'day']} views={['year', 'month', 'day']}
onChange={(date: Date | null, keyboardInputValue: string | undefined) => { slots={{
isEmpty(keyboardInputValue) && field.onChange(''); textField: (params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || t<string>('builder.common.form.end-date.help-text')}
/>
),
}}
onChange={(date: dayjs.Dayjs | null) => {
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD')); date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
}} }}
renderInput={(params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || t<string>('builder.common.form.end-date.help-text')}
/>
)}
/> />
)} )}
/> />

View File

@ -1,7 +1,7 @@
import { joiResolver } from '@hookform/resolvers/joi'; import { joiResolver } from '@hookform/resolvers/joi';
import { Add, DriveFileRenameOutline } from '@mui/icons-material'; import { Add, DriveFileRenameOutline } from '@mui/icons-material';
import { Button, TextField } from '@mui/material'; import { Button, TextField } from '@mui/material';
import { DatePicker } from '@mui/x-date-pickers'; import { DatePicker } from '@mui/x-date-pickers/DatePicker';
import { Project, SectionPath } from '@reactive-resume/schema'; import { Project, SectionPath } from '@reactive-resume/schema';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import Joi from 'joi'; import Joi from 'joi';
@ -137,21 +137,23 @@ const ProjectModal: React.FC = () => {
control={control} control={control}
render={({ field, fieldState }) => ( render={({ field, fieldState }) => (
<DatePicker <DatePicker
{...field}
openTo="year" openTo="year"
inputRef={field.ref}
label={t<string>('builder.common.form.start-date.label')} label={t<string>('builder.common.form.start-date.label')}
value={dayjs(field.value)}
views={['year', 'month', 'day']} views={['year', 'month', 'day']}
onChange={(date: Date | null, keyboardInputValue: string | undefined) => { slots={{
isEmpty(keyboardInputValue) && field.onChange(''); textField: (params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || params.inputProps?.placeholder}
/>
),
}}
onChange={(date: dayjs.Dayjs | null) => {
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD')); date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
}} }}
renderInput={(params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || params.inputProps?.placeholder}
/>
)}
/> />
)} )}
/> />
@ -161,21 +163,23 @@ const ProjectModal: React.FC = () => {
control={control} control={control}
render={({ field, fieldState }) => ( render={({ field, fieldState }) => (
<DatePicker <DatePicker
{...field}
openTo="year" openTo="year"
inputRef={field.ref}
label={t<string>('builder.common.form.end-date.label')} label={t<string>('builder.common.form.end-date.label')}
value={dayjs(field.value)}
views={['year', 'month', 'day']} views={['year', 'month', 'day']}
onChange={(date: Date | null, keyboardInputValue: string | undefined) => { slots={{
isEmpty(keyboardInputValue) && field.onChange(''); textField: (params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || t<string>('builder.common.form.end-date.help-text')}
/>
),
}}
onChange={(date: dayjs.Dayjs | null) => {
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD')); date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
}} }}
renderInput={(params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || 'Leave this field blank, if still present'}
/>
)}
/> />
)} )}
/> />

View File

@ -1,7 +1,7 @@
import { joiResolver } from '@hookform/resolvers/joi'; import { joiResolver } from '@hookform/resolvers/joi';
import { Add, DriveFileRenameOutline } from '@mui/icons-material'; import { Add, DriveFileRenameOutline } from '@mui/icons-material';
import { Button, TextField } from '@mui/material'; import { Button, TextField } from '@mui/material';
import { DatePicker } from '@mui/x-date-pickers'; import { DatePicker } from '@mui/x-date-pickers/DatePicker';
import { Publication, SectionPath } from '@reactive-resume/schema'; import { Publication, SectionPath } from '@reactive-resume/schema';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import Joi from 'joi'; import Joi from 'joi';
@ -128,21 +128,23 @@ const PublicationModal: React.FC = () => {
control={control} control={control}
render={({ field, fieldState }) => ( render={({ field, fieldState }) => (
<DatePicker <DatePicker
{...field}
openTo="year" openTo="year"
inputRef={field.ref}
label={t<string>('builder.common.form.date.label')} label={t<string>('builder.common.form.date.label')}
value={dayjs(field.value)}
views={['year', 'month', 'day']} views={['year', 'month', 'day']}
onChange={(date: Date | null, keyboardInputValue: string | undefined) => { slots={{
isEmpty(keyboardInputValue) && field.onChange(''); textField: (params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || params.inputProps?.placeholder}
/>
),
}}
onChange={(date: dayjs.Dayjs | null) => {
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD')); date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
}} }}
renderInput={(params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || params.inputProps?.placeholder}
/>
)}
/> />
)} )}
/> />

View File

@ -1,7 +1,7 @@
import { joiResolver } from '@hookform/resolvers/joi'; import { joiResolver } from '@hookform/resolvers/joi';
import { Add, DriveFileRenameOutline } from '@mui/icons-material'; import { Add, DriveFileRenameOutline } from '@mui/icons-material';
import { Button, TextField } from '@mui/material'; import { Button, TextField } from '@mui/material';
import { DatePicker } from '@mui/x-date-pickers'; import { DatePicker } from '@mui/x-date-pickers/DatePicker';
import { SectionPath, Volunteer } from '@reactive-resume/schema'; import { SectionPath, Volunteer } from '@reactive-resume/schema';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import Joi from 'joi'; import Joi from 'joi';
@ -134,21 +134,23 @@ const VolunteerModal: React.FC = () => {
control={control} control={control}
render={({ field, fieldState }) => ( render={({ field, fieldState }) => (
<DatePicker <DatePicker
{...field}
openTo="year" openTo="year"
inputRef={field.ref}
label={t<string>('builder.common.form.start-date.label')} label={t<string>('builder.common.form.start-date.label')}
value={dayjs(field.value)}
views={['year', 'month', 'day']} views={['year', 'month', 'day']}
onChange={(date: Date | null, keyboardInputValue: string | undefined) => { slots={{
isEmpty(keyboardInputValue) && field.onChange(''); textField: (params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || params.inputProps?.placeholder}
/>
),
}}
onChange={(date: dayjs.Dayjs | null) => {
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD')); date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
}} }}
renderInput={(params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || params.inputProps?.placeholder}
/>
)}
/> />
)} )}
/> />
@ -158,21 +160,23 @@ const VolunteerModal: React.FC = () => {
control={control} control={control}
render={({ field, fieldState }) => ( render={({ field, fieldState }) => (
<DatePicker <DatePicker
{...field}
openTo="year" openTo="year"
inputRef={field.ref}
label={t<string>('builder.common.form.end-date.label')} label={t<string>('builder.common.form.end-date.label')}
value={dayjs(field.value)}
views={['year', 'month', 'day']} views={['year', 'month', 'day']}
onChange={(date: Date | null, keyboardInputValue: string | undefined) => { slots={{
isEmpty(keyboardInputValue) && field.onChange(''); textField: (params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || t<string>('builder.common.form.end-date.help-text')}
/>
),
}}
onChange={(date: dayjs.Dayjs | null) => {
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD')); date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
}} }}
renderInput={(params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || 'Leave this field blank, if still present'}
/>
)}
/> />
)} )}
/> />

View File

@ -1,7 +1,7 @@
import { joiResolver } from '@hookform/resolvers/joi'; import { joiResolver } from '@hookform/resolvers/joi';
import { Add, DriveFileRenameOutline } from '@mui/icons-material'; import { Add, DriveFileRenameOutline } from '@mui/icons-material';
import { Button, TextField } from '@mui/material'; import { Button, TextField } from '@mui/material';
import { DatePicker } from '@mui/x-date-pickers'; import { DatePicker } from '@mui/x-date-pickers/DatePicker';
import { WorkExperience } from '@reactive-resume/schema'; import { WorkExperience } from '@reactive-resume/schema';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import Joi from 'joi'; import Joi from 'joi';
@ -141,21 +141,23 @@ const WorkModal: React.FC = () => {
control={control} control={control}
render={({ field, fieldState }) => ( render={({ field, fieldState }) => (
<DatePicker <DatePicker
{...field}
openTo="year" openTo="year"
inputRef={field.ref}
label={t<string>('builder.common.form.start-date.label')} label={t<string>('builder.common.form.start-date.label')}
value={dayjs(field.value)}
views={['year', 'month', 'day']} views={['year', 'month', 'day']}
onChange={(date: Date | null, keyboardInputValue: string | undefined) => { slots={{
isEmpty(keyboardInputValue) && field.onChange(''); textField: (params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || params.inputProps?.placeholder}
/>
),
}}
onChange={(date: dayjs.Dayjs | null) => {
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD')); date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
}} }}
renderInput={(params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || params.inputProps?.placeholder}
/>
)}
/> />
)} )}
/> />
@ -165,21 +167,23 @@ const WorkModal: React.FC = () => {
control={control} control={control}
render={({ field, fieldState }) => ( render={({ field, fieldState }) => (
<DatePicker <DatePicker
{...field}
openTo="year" openTo="year"
inputRef={field.ref}
label={t<string>('builder.common.form.end-date.label')} label={t<string>('builder.common.form.end-date.label')}
value={dayjs(field.value)}
views={['year', 'month', 'day']} views={['year', 'month', 'day']}
onChange={(date: Date | null, keyboardInputValue: string | undefined) => { slots={{
isEmpty(keyboardInputValue) && field.onChange(''); textField: (params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || t<string>('builder.common.form.end-date.help-text')}
/>
),
}}
onChange={(date: dayjs.Dayjs | null) => {
date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD')); date && dayjs(date).isValid() && field.onChange(dayjs(date).format('YYYY-MM-DD'));
}} }}
renderInput={(params) => (
<TextField
{...params}
error={!!fieldState.error}
helperText={fieldState.error?.message || t<string>('builder.common.form.end-date.help-text')}
/>
)}
/> />
)} )}
/> />

View File

@ -1,8 +1,8 @@
import '@/styles/globals.scss'; import '@/styles/globals.scss';
import env from '@beam-australia/react-env'; import env from '@beam-australia/react-env';
import { LocalizationProvider } from '@mui/x-date-pickers';
import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs'; import { AdapterDayjs } from '@mui/x-date-pickers/AdapterDayjs';
import { LocalizationProvider } from '@mui/x-date-pickers/LocalizationProvider';
import { GoogleOAuthProvider } from '@react-oauth/google'; import { GoogleOAuthProvider } from '@react-oauth/google';
import type { AppProps } from 'next/app'; import type { AppProps } from 'next/app';
import Head from 'next/head'; import Head from 'next/head';

View File

@ -1,4 +1,4 @@
import { find } from 'lodash'; import find from 'lodash/find';
import get from 'lodash/get'; import get from 'lodash/get';
import React from 'react'; import React from 'react';
import { validate } from 'uuid'; import { validate } from 'uuid';

View File

@ -1,12 +1,12 @@
{ {
"name": "reactive-resume", "name": "reactive-resume",
"version": "3.6.19", "version": "3.7.0",
"private": true, "private": true,
"scripts": { "scripts": {
"dev": "env-cmd --silent cross-var cross-env VERSION=$npm_package_version turbo run dev", "dev": "env-cmd --silent cross-var cross-env VERSION=$npm_package_version turbo run dev",
"build": "env-cmd --silent cross-var cross-env VERSION=$npm_package_version turbo run build", "build": "env-cmd --silent cross-var cross-env VERSION=$npm_package_version turbo run build",
"start": "env-cmd --silent cross-var cross-env VERSION=$npm_package_version turbo run start", "start": "env-cmd --silent cross-var cross-env VERSION=$npm_package_version turbo run start",
"update-deps": "ncu -x nanoid,class-validator --deep -u && pnpm install", "update-deps": "ncu -x nanoid --deep -u && pnpm install",
"generate-env": "ts-node ./scripts/generate-env.ts", "generate-env": "ts-node ./scripts/generate-env.ts",
"format": "prettier --write .", "format": "prettier --write .",
"lint": "turbo run lint" "lint": "turbo run lint"

View File

@ -2,7 +2,7 @@ import { HttpService } from '@nestjs/axios';
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config'; import { ConfigService } from '@nestjs/config';
import { Font } from '@reactive-resume/schema'; import { Font } from '@reactive-resume/schema';
import { get } from 'lodash'; import get from 'lodash/get';
import { firstValueFrom } from 'rxjs'; import { firstValueFrom } from 'rxjs';
import cachedResponse from './assets/cachedResponse.json'; import cachedResponse from './assets/cachedResponse.json';

View File

@ -16,7 +16,10 @@ import {
import csv from 'csvtojson'; import csv from 'csvtojson';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { readFile, unlink } from 'fs/promises'; import { readFile, unlink } from 'fs/promises';
import { cloneDeep, get, isEmpty, merge } from 'lodash'; import cloneDeep from 'lodash/cloneDeep';
import get from 'lodash/get';
import isEmpty from 'lodash/isEmpty';
import merge from 'lodash/merge';
import StreamZip from 'node-stream-zip'; import StreamZip from 'node-stream-zip';
import { DeepPartial } from 'typeorm'; import { DeepPartial } from 'typeorm';
import { v4 as uuidv4 } from 'uuid'; import { v4 as uuidv4 } from 'uuid';

View File

@ -4,7 +4,10 @@ import { ConfigService } from '@nestjs/config';
import { InjectRepository } from '@nestjs/typeorm'; import { InjectRepository } from '@nestjs/typeorm';
import { Resume as ResumeSchema } from '@reactive-resume/schema'; import { Resume as ResumeSchema } from '@reactive-resume/schema';
import fs from 'fs/promises'; import fs from 'fs/promises';
import { isEmpty, pick, sample, set } from 'lodash'; import isEmpty from 'lodash/isEmpty';
import pick from 'lodash/pick';
import sample from 'lodash/sample';
import set from 'lodash/set';
import { nanoid } from 'nanoid'; import { nanoid } from 'nanoid';
import { extname } from 'path'; import { extname } from 'path';
import { Repository } from 'typeorm'; import { Repository } from 'typeorm';