Skip to content

Commit b5ab306

Browse files
committed
fixup! [IMP] outlook: remove the enrichment feature from the addon
1 parent ecc3918 commit b5ab306

File tree

5 files changed

+121
-91
lines changed

5 files changed

+121
-91
lines changed

outlook/src/helpers/translate.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,8 +56,6 @@ export function _t(text: string, parameters?: any): string {
5656
let translated = translations ? translations[text] : text
5757

5858
if (!translated) {
59-
if (translations && Object.keys(translations).length) {
60-
}
6159
translated = text
6260
}
6361

outlook/src/models/partner.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,9 +107,6 @@ export class Partner {
107107
*
108108
* Return
109109
* - The Partner related to the given email address
110-
* - The list of Odoo companies in which the current user belongs
111-
* - True if the current user can create partner in his Odoo database
112-
* - True if the current user can create projects in his Odoo database
113110
* - The error message if something bad happened
114111
*/
115112
static async getPartner(

outlook/src/taskpane/components/App.tsx

Lines changed: 118 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,19 @@
1-
import { Button, makeStyles } from '@fluentui/react-components'
2-
import { ArrowLeftRegular } from '@fluentui/react-icons'
1+
import {
2+
Button,
3+
makeStyles,
4+
Menu,
5+
MenuButton,
6+
MenuItem,
7+
MenuList,
8+
MenuPopover,
9+
MenuTrigger,
10+
} from '@fluentui/react-components'
11+
import {
12+
ArrowClockwiseRegular,
13+
ArrowLeftRegular,
14+
MoreVerticalRegular,
15+
SignOutRegular,
16+
} from '@fluentui/react-icons'
317
import * as React from 'react'
418
import { _t, fetchTranslations } from '../../helpers/translate'
519
import { Email } from '../../models/email'
@@ -35,6 +49,23 @@ const useStyles = makeStyles({
3549
marginTop: '5px',
3650
marginLeft: '10px',
3751
},
52+
spinner: {
53+
padding: '4px',
54+
},
55+
kebab: {
56+
minWidth: '0'
57+
},
58+
kebabButton: {
59+
'& div': {
60+
display: 'flex',
61+
flexDirection: 'row',
62+
alignItems: 'center',
63+
justifyContent: 'space-between',
64+
'& > span': {
65+
marginRight: '5px'
66+
}
67+
}
68+
},
3869
})
3970

4071
const App: React.FC<AppProps> = (_props: AppProps) => {
@@ -43,15 +74,17 @@ const App: React.FC<AppProps> = (_props: AppProps) => {
4374
const [loading, setLoading] = React.useState(
4475
!!localStorage.getItem('odoo_access_token')
4576
)
77+
const [logged, setLogged] = React.useState(false)
4678

4779
// pages used to go back
4880
const [currentPage, setCurrentPage] = React.useState(null)
49-
const [pages, setPages] = React.useState(() => [])
81+
const [pagesPartner, setPagesPartner]: [[any, Partner | null][], any] =
82+
React.useState(() => [])
5083

5184
let email = new Email()
5285

53-
const pushPage = (page) => {
54-
setPages((prevPages) => [...prevPages, page])
86+
const pushPage = (page, partner: Partner = null) => {
87+
setPagesPartner((prevPages) => [...prevPages, [page, partner]])
5588
setCurrentPage(page)
5689
}
5790

@@ -88,8 +121,9 @@ const App: React.FC<AppProps> = (_props: AppProps) => {
88121

89122
const logout = () => {
90123
setLoading(false)
124+
setLogged(false)
91125
localStorage.removeItem('odoo_access_token')
92-
setPages([])
126+
setPagesPartner([])
93127
setCurrentPage(<Login onLogin={loadEmailContacts} />)
94128
}
95129

@@ -103,12 +137,12 @@ const App: React.FC<AppProps> = (_props: AppProps) => {
103137
key={`partner-${partner.key}`}
104138
partner={partner}
105139
email={email}
106-
onLogout={logout}
107140
onSearch={onSearchPartners}
108141
pushPage={pushPage}
109142
goBack={goBack}
110143
updatePartner={updatePartner}
111-
/>
144+
/>,
145+
partner
112146
)
113147

114148
// fetch the leads, tickets, tasks, etc
@@ -135,15 +169,17 @@ const App: React.FC<AppProps> = (_props: AppProps) => {
135169
key={`partner-${partner.key}`}
136170
partner={partner}
137171
email={email}
138-
onLogout={logout}
139172
onSearch={onSearchPartners}
140173
pushPage={pushPage}
141174
goBack={goBack}
142175
updatePartner={updatePartner}
143176
/>
144177
)
145178

146-
setPages((prevPages) => [...prevPages.slice(0, -1), newCard])
179+
setPagesPartner((prevPages) => [
180+
...prevPages.slice(0, -1),
181+
[newCard, partner],
182+
])
147183
setCurrentPage(newCard)
148184
}
149185

@@ -169,15 +205,15 @@ const App: React.FC<AppProps> = (_props: AppProps) => {
169205
email={email}
170206
/>
171207
)
172-
setPages([searchRecords])
208+
setPagesPartner([[searchRecords, null]])
173209
setCurrentPage(searchRecords)
174210
}
175211

176212
/**
177213
* Fetch the information about the contact in the email.
178214
* (to know if they exist in the database...)
179215
*/
180-
const loadEmailContacts = async () => {
216+
const loadEmailContacts = async (autoOpen = true) => {
181217
const token = localStorage.getItem('odoo_access_token')
182218
if (!token?.length) {
183219
logout()
@@ -207,26 +243,42 @@ const App: React.FC<AppProps> = (_props: AppProps) => {
207243

208244
fetchTranslations()
209245
setEmailContacts(searchedPartners)
210-
if (searchedPartners.length === 1) {
246+
if (searchedPartners.length === 1 && autoOpen) {
211247
setPartner(searchedPartners[0])
212248
}
213249

250+
setLogged(true)
214251
setLoading(false)
215252
}
216253

217254
const goBack = (backCount: number = 1) => {
218-
if (pages.length === 2 && email.contacts.length >= 2) {
219-
// the contact could have been created, reload its information
220-
loadEmailContacts()
221-
return
222-
}
223-
setPages((prevPages) => {
224-
const page = prevPages[prevPages.length - 1 - backCount]
255+
setPagesPartner((prevPages) => {
256+
if (prevPages.length === 2) {
257+
// the contact could have been created, reload the view
258+
setTimeout(() => loadEmailContacts(false))
259+
return []
260+
}
261+
const [page, _partner] = prevPages[prevPages.length - 1 - backCount]
225262
setCurrentPage(page)
226263
return prevPages.slice(0, prevPages.length - backCount)
227264
})
228265
}
229266

267+
const onRefresh = async () => {
268+
const partner = pagesPartner[pagesPartner.length - 1][1]
269+
const [newPartner, error] = await Partner.getPartner(
270+
partner.name,
271+
partner.email,
272+
partner.id
273+
)
274+
275+
if (error.code) {
276+
showError(error.message)
277+
return
278+
}
279+
updatePartner(newPartner)
280+
}
281+
230282
// set the logged state if needed, without blocking the rendering
231283
React.useEffect(() => {
232284
loadEmailContacts()
@@ -249,9 +301,10 @@ const App: React.FC<AppProps> = (_props: AppProps) => {
249301

250302
return (
251303
<div className={styles.root}>
252-
<div className={styles.header}>
253-
{pages.length > 1 && (
304+
{logged && (
305+
<div className={styles.header}>
254306
<Button
307+
disabled={pagesPartner.length <= 1}
255308
className={styles.goBack}
256309
icon={<ArrowLeftRegular />}
257310
title={_t('Go back')}
@@ -260,9 +313,49 @@ const App: React.FC<AppProps> = (_props: AppProps) => {
260313
appearance="subtle"
261314
onClick={() => goBack()}
262315
/>
263-
)}
264-
<GlobalLoading />
265-
</div>
316+
317+
<GlobalLoading />
318+
319+
<Menu>
320+
<MenuTrigger disableButtonEnhancement>
321+
<MenuButton
322+
appearance="subtle"
323+
icon={<MoreVerticalRegular />}
324+
size="medium"
325+
/>
326+
</MenuTrigger>
327+
328+
<MenuPopover className={styles.kebab}>
329+
<MenuList>
330+
<MenuItem
331+
className={styles.kebabButton}
332+
onClick={onRefresh}
333+
disabled={
334+
!pagesPartner.length ||
335+
!pagesPartner[
336+
pagesPartner.length - 1
337+
][1]
338+
}
339+
>
340+
<div>
341+
<span>{_t('Refresh')}</span>
342+
<ArrowClockwiseRegular />
343+
</div>
344+
</MenuItem>
345+
<MenuItem
346+
className={styles.kebabButton}
347+
onClick={() => logout()}
348+
>
349+
<div>
350+
<span>{_t('Log out')}</span>
351+
<SignOutRegular />
352+
</div>
353+
</MenuItem>
354+
</MenuList>
355+
</MenuPopover>
356+
</Menu>
357+
</div>
358+
)}
266359
{loading ? <Loading /> : currentPage}
267360
<Error />
268361
</div>

outlook/src/taskpane/components/PartnerView.tsx

Lines changed: 2 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { Button, Image, makeStyles } from '@fluentui/react-components'
1+
import { Button, makeStyles } from '@fluentui/react-components'
22
import * as React from 'react'
33
import { getOdooRecordURL } from '../../helpers/http'
44
import { _t } from '../../helpers/translate'
@@ -7,12 +7,10 @@ import { showError } from './Error'
77
import RecordCard from './RecordCard'
88

99
import {
10-
ArrowClockwiseRegular,
1110
BuildingRegular,
1211
MailRegular,
1312
PhoneRegular,
1413
SearchRegular,
15-
SignOutRegular,
1614
} from '@fluentui/react-icons'
1715
import { searchRecords } from '../../helpers/search_records'
1816
import { Email } from '../../models/email'
@@ -29,7 +27,6 @@ import SelectProject from './SelectProject'
2927
export interface PartnerViewProps {
3028
partner: Partner
3129
email: Email
32-
onLogout: Function
3330
onSearch: Function
3431
pushPage: Function
3532
goBack: Function
@@ -62,41 +59,12 @@ const useStyles = makeStyles({
6259
verticalAlign: 'middle',
6360
},
6461
},
65-
spinner: {
66-
padding: '4px',
67-
},
6862
})
6963

7064
const PartnerView: React.FC<PartnerViewProps> = (props: PartnerViewProps) => {
71-
const {
72-
partner,
73-
email,
74-
onLogout,
75-
onSearch,
76-
pushPage,
77-
goBack,
78-
updatePartner,
79-
} = props
65+
const { partner, email, onSearch, pushPage, goBack, updatePartner } = props
8066
const styles = useStyles()
8167

82-
const [isRefreshing, setIsRefreshing] = React.useState(false)
83-
84-
const onRefresh = async () => {
85-
setIsRefreshing(true)
86-
const [newPartner, error] = await Partner.getPartner(
87-
partner.name,
88-
partner.email,
89-
partner.id
90-
)
91-
setIsRefreshing(false)
92-
93-
if (error.code) {
94-
showError(error.message)
95-
return
96-
}
97-
updatePartner(newPartner)
98-
}
99-
10068
const onCreate = async () => {
10169
showGlobalLoading()
10270
const newPartner = await Partner.savePartner(partner)
@@ -336,24 +304,6 @@ const PartnerView: React.FC<PartnerViewProps> = (props: PartnerViewProps) => {
336304
)}
337305
/>
338306
)}
339-
340-
{isRefreshing ? (
341-
<Image
342-
className={styles.spinner}
343-
width="24px"
344-
src="assets/spinner.gif"
345-
alt={_t('Loading')}
346-
/>
347-
) : (
348-
<Button
349-
icon={<ArrowClockwiseRegular />}
350-
title={_t('Refresh Contact Details')}
351-
size="small"
352-
shape="circular"
353-
appearance="subtle"
354-
onClick={onRefresh}
355-
/>
356-
)}
357307
<Button
358308
icon={<SearchRegular />}
359309
title={_t('Search contact')}
@@ -362,14 +312,6 @@ const PartnerView: React.FC<PartnerViewProps> = (props: PartnerViewProps) => {
362312
appearance="subtle"
363313
onClick={() => onSearch()}
364314
/>
365-
<Button
366-
icon={<SignOutRegular />}
367-
title={_t('Logout')}
368-
size="small"
369-
shape="circular"
370-
appearance="subtle"
371-
onClick={() => onLogout()}
372-
/>
373315
</div>
374316
{!!partner.leads && (
375317
<RecordsSection

outlook/src/taskpane/components/SearchNoRecord.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const useStyles = makeStyles({
88
image: {
99
margin: 'auto',
1010
display: 'block',
11-
width: '60%',
11+
width: '52%',
1212
overflow: 'visible',
1313
paddingTop: '10px',
1414
},

0 commit comments

Comments
 (0)