mirror of
https://github.com/AmruthPillai/Reactive-Resume.git
synced 2025-11-13 00:03:27 +10:00
update dependencies, fix typescript issues, optimize lodash imports
This commit is contained in:
@ -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();
|
||||||
|
|||||||
@ -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';
|
||||||
|
|||||||
@ -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';
|
||||||
|
|||||||
@ -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'));
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -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';
|
||||||
|
|||||||
@ -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';
|
||||||
|
|||||||
@ -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}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -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}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -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'}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -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')}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -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'}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -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}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -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'}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -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')}
|
|
||||||
/>
|
|
||||||
)}
|
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
/>
|
/>
|
||||||
|
|||||||
@ -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';
|
||||||
|
|||||||
@ -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';
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
@ -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';
|
||||||
|
|||||||
@ -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';
|
||||||
|
|||||||
@ -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';
|
||||||
|
|||||||
Reference in New Issue
Block a user