Skip to content

Commit 2aee838

Browse files
authored
feat: new quick create timeline (#1812)
1 parent 3901a21 commit 2aee838

14 files changed

Lines changed: 463 additions & 48 deletions

File tree

src/components/ExperienceEditor/ExperienceEditor.tsx

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,8 @@ type ExperienceEditorProps = {
6868
onSearchUser?: (query: string) => void;
6969
users?: User[];
7070
quick?: boolean;
71+
showAdvance?: boolean;
72+
experienceVisibility?: VisibilityItem;
7173
};
7274

7375
enum TagsProps {
@@ -97,6 +99,8 @@ export const ExperienceEditor: React.FC<ExperienceEditorProps> = props => {
9799
onSearchUser,
98100
users,
99101
quick = false,
102+
showAdvance = false,
103+
experienceVisibility,
100104
} = props;
101105
const styles = useStyles({ quick });
102106

@@ -119,13 +123,13 @@ export const ExperienceEditor: React.FC<ExperienceEditorProps> = props => {
119123
const [newExperience, setNewExperience] =
120124
useState<ExperienceProps>(experience);
121125
const [image, setImage] = useState<string | undefined>(
122-
experience.experienceImageURL,
126+
experience?.experienceImageURL,
123127
);
124128
const [, setDetailChanged] = useState<boolean>(false);
125129
const [isLoading, setIsloading] = useState<boolean>(false);
126130
const [isSubmitted, setIsSubmitted] = useState<boolean>(false);
127131
const [selectedVisibility, setSelectedVisibility] =
128-
useState<VisibilityItem>();
132+
useState<VisibilityItem>(experienceVisibility);
129133
const [selectedUserIds, setSelectedUserIds] = useState<User[]>([]);
130134
const [pageUserIds, setPageUserIds] = React.useState<number>(1);
131135
const [isLoadingSelectedUser, setIsLoadingSelectedUser] =
@@ -138,7 +142,8 @@ export const ExperienceEditor: React.FC<ExperienceEditorProps> = props => {
138142
visibility: false,
139143
selectedUserId: false,
140144
});
141-
const [showAdvanceSetting, setShowAdvanceSetting] = useState<boolean>(false);
145+
const [showAdvanceSetting, setShowAdvanceSetting] =
146+
useState<boolean>(showAdvance);
142147

143148
useEffect(() => {
144149
const experienceId = router.query.experienceId as string | null;
@@ -1039,22 +1044,22 @@ export const ExperienceEditor: React.FC<ExperienceEditorProps> = props => {
10391044

10401045
<ShowIf condition={quick}>
10411046
<div className={styles.header}>
1042-
<Button
1043-
color="primary"
1044-
variant="outlined"
1045-
style={{ width: 'auto' }}
1046-
onClick={handleAdvanceSetting}>
1047-
{i18n.t(`Experience.Editor.Btn.AdvancedSettings`)}
1048-
</Button>
1049-
<FormControl classes={{ root: styles.formControl }}>
1047+
<ShowIf condition={!showAdvanceSetting}>
10501048
<Button
10511049
color="primary"
1052-
variant="contained"
1050+
variant="outlined"
10531051
style={{ width: 'auto' }}
1054-
onClick={saveExperience}>
1055-
{i18n.t(`Experience.Editor.Btn.${type}`)}
1052+
onClick={handleAdvanceSetting}>
1053+
{i18n.t(`Experience.Editor.Btn.AdvancedSettings`)}
10561054
</Button>
1057-
</FormControl>
1055+
</ShowIf>
1056+
<Button
1057+
color="primary"
1058+
variant="contained"
1059+
style={{ width: 'auto', marginLeft: 'auto' }}
1060+
onClick={saveExperience}>
1061+
{i18n.t(`Experience.Editor.Btn.${type}`)}
1062+
</Button>
10581063
</div>
10591064
</ShowIf>
10601065
</div>

src/components/ExperienceQuick/ExperienceQuick.container.tsx

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,29 +11,25 @@ import debounce from 'lodash/debounce';
1111
import { useExperienceHook } from 'src/hooks/use-experience-hook';
1212
import { useSearchHook } from 'src/hooks/use-search.hooks';
1313
import { useUpload } from 'src/hooks/use-upload.hook';
14-
import { ExperienceProps } from 'src/interfaces/experience';
14+
import { ExperienceProps, VisibilityItem } from 'src/interfaces/experience';
1515
import i18n from 'src/locale';
1616
import theme from 'src/themes/default';
1717

1818
type ExperienceQuickContainerType = {
1919
open: boolean;
2020
onClose: () => void;
2121
onSuccess: () => void;
22+
experience?: ExperienceProps;
23+
selectedVisibility?: VisibilityItem;
2224
};
2325

2426
export const ExperienceQuickContainer: React.FC<ExperienceQuickContainerType> =
2527
props => {
26-
const { open, onClose, onSuccess } = props;
28+
const { open, onClose, onSuccess, experience, selectedVisibility } = props;
2729
const [showPrompt, setShowPrompt] = useState<boolean>(false);
2830
// TODO: separate hook for tag, people and experience
29-
const {
30-
selectedExperience,
31-
tags,
32-
people,
33-
saveExperience,
34-
searchTags,
35-
searchPeople,
36-
} = useExperienceHook();
31+
const { tags, people, saveExperience, searchTags, searchPeople } =
32+
useExperienceHook();
3733
const { searchUsers, users } = useSearchHook();
3834

3935
const isMobile = useMediaQuery(theme.breakpoints.down('xs'));
@@ -79,15 +75,15 @@ export const ExperienceQuickContainer: React.FC<ExperienceQuickContainerType> =
7975
return (
8076
<>
8177
<Modal
82-
title={i18n.t('Experience.Create.Title')}
78+
title={i18n.t('Experience.Create.Quick')}
8379
subtitle={i18n.t('TopNavbar.Title.Experience')}
8480
onClose={onClose}
8581
open={open}
8682
fullScreen={isMobile}
8783
maxWidth="sm">
8884
<ExperienceEditor
8985
isEdit={false}
90-
experience={selectedExperience}
86+
experience={experience}
9187
tags={tags}
9288
people={people}
9389
onSearchTags={handleSearchTags}
@@ -97,6 +93,8 @@ export const ExperienceQuickContainer: React.FC<ExperienceQuickContainerType> =
9793
onSearchUser={handleSearchUser}
9894
users={users}
9995
quick
96+
showAdvance
97+
experienceVisibility={selectedVisibility}
10098
/>
10199
</Modal>
102100

Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
import { createStyles, makeStyles, Theme } from '@material-ui/core/styles';
2+
3+
export const useStyles = makeStyles<Theme>(theme =>
4+
createStyles({
5+
root: {
6+
marginBottom: theme.spacing(1),
7+
border: '1px solid',
8+
borderColor: '#FFF',
9+
borderRadius: 10,
10+
padding: 20,
11+
width: '100%',
12+
boxShadow: `0px 2px 10px rgba(0, 0, 0, 0.05)`,
13+
position: 'relative',
14+
15+
'&::before': {
16+
content: '""',
17+
position: 'absolute',
18+
width: 8,
19+
top: 0,
20+
left: 0,
21+
height: '100%',
22+
backgroundColor: '#FFF',
23+
borderTopLeftRadius: 10,
24+
borderBottomLeftRadius: 10,
25+
},
26+
},
27+
image: {
28+
width: 68,
29+
height: 68,
30+
opacity: 0.9,
31+
borderRadius: 5,
32+
},
33+
cardContent: {
34+
width: 140,
35+
padding: '0px 0px 0px 20px',
36+
flexGrow: 1,
37+
38+
'&:last-child': {
39+
paddingBottom: 0,
40+
},
41+
},
42+
title: {
43+
wordBreak: 'break-word',
44+
whiteSpace: 'nowrap',
45+
overflow: 'hidden',
46+
textOverflow: 'ellipsis',
47+
[theme.breakpoints.down('xs')]: {
48+
fontSize: '14px',
49+
},
50+
},
51+
subtitle: {
52+
whiteSpace: 'nowrap',
53+
overflow: 'hidden',
54+
textOverflow: 'ellipsis',
55+
[theme.breakpoints.down('xs')]: {
56+
fontSize: '12px',
57+
fontWeight: 500,
58+
},
59+
},
60+
icon: {
61+
[theme.breakpoints.down('xs')]: {
62+
color: '#404040',
63+
},
64+
},
65+
menu: {
66+
borderRadius: 10,
67+
marginTop: 8,
68+
},
69+
delete: {
70+
color: '#FE3636',
71+
},
72+
error: {
73+
background: '#FE3636',
74+
color: '#FFF',
75+
'&:hover': {
76+
color: theme.palette.text.primary,
77+
},
78+
},
79+
modal: {
80+
paddingBottom: 10,
81+
},
82+
input: {
83+
width: 560,
84+
marginBottom: 0,
85+
marginTop: 10,
86+
87+
'& .MuiInputLabel-root, .MuiInputBase-root': {
88+
color: '#616161',
89+
},
90+
[theme.breakpoints.down('xs')]: {
91+
width: '100%',
92+
},
93+
},
94+
inputText: {
95+
flex: 1,
96+
height: 20,
97+
},
98+
action: {
99+
cursor: 'pointer',
100+
flex: 1,
101+
},
102+
}),
103+
);

0 commit comments

Comments
 (0)