Skip to content

Commit fcb4a01

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

File tree

5 files changed

+111
-91
lines changed

5 files changed

+111
-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: 108 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,14 @@ const useStyles = makeStyles({
3549
marginTop: '5px',
3650
marginLeft: '10px',
3751
},
52+
spinner: {
53+
padding: '4px',
54+
},
55+
kebabButton: {
56+
display: 'flex',
57+
flexDirection: 'row',
58+
alignItems: 'center',
59+
},
3860
})
3961

4062
const App: React.FC<AppProps> = (_props: AppProps) => {
@@ -43,15 +65,17 @@ const App: React.FC<AppProps> = (_props: AppProps) => {
4365
const [loading, setLoading] = React.useState(
4466
!!localStorage.getItem('odoo_access_token')
4567
)
68+
const [logged, setLogged] = React.useState(false)
4669

4770
// pages used to go back
4871
const [currentPage, setCurrentPage] = React.useState(null)
49-
const [pages, setPages] = React.useState(() => [])
72+
const [pagesPartner, setPagesPartner]: [[any, Partner | null][], any] =
73+
React.useState(() => [])
5074

5175
let email = new Email()
5276

53-
const pushPage = (page) => {
54-
setPages((prevPages) => [...prevPages, page])
77+
const pushPage = (page, partner: Partner = null) => {
78+
setPagesPartner((prevPages) => [...prevPages, [page, partner]])
5579
setCurrentPage(page)
5680
}
5781

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

89113
const logout = () => {
90114
setLoading(false)
115+
setLogged(false)
91116
localStorage.removeItem('odoo_access_token')
92-
setPages([])
117+
setPagesPartner([])
93118
setCurrentPage(<Login onLogin={loadEmailContacts} />)
94119
}
95120

@@ -103,12 +128,12 @@ const App: React.FC<AppProps> = (_props: AppProps) => {
103128
key={`partner-${partner.key}`}
104129
partner={partner}
105130
email={email}
106-
onLogout={logout}
107131
onSearch={onSearchPartners}
108132
pushPage={pushPage}
109133
goBack={goBack}
110134
updatePartner={updatePartner}
111-
/>
135+
/>,
136+
partner
112137
)
113138

114139
// fetch the leads, tickets, tasks, etc
@@ -135,15 +160,17 @@ const App: React.FC<AppProps> = (_props: AppProps) => {
135160
key={`partner-${partner.key}`}
136161
partner={partner}
137162
email={email}
138-
onLogout={logout}
139163
onSearch={onSearchPartners}
140164
pushPage={pushPage}
141165
goBack={goBack}
142166
updatePartner={updatePartner}
143167
/>
144168
)
145169

146-
setPages((prevPages) => [...prevPages.slice(0, -1), newCard])
170+
setPagesPartner((prevPages) => [
171+
...prevPages.slice(0, -1),
172+
[newCard, partner],
173+
])
147174
setCurrentPage(newCard)
148175
}
149176

@@ -169,15 +196,15 @@ const App: React.FC<AppProps> = (_props: AppProps) => {
169196
email={email}
170197
/>
171198
)
172-
setPages([searchRecords])
199+
setPagesPartner([[searchRecords, null]])
173200
setCurrentPage(searchRecords)
174201
}
175202

176203
/**
177204
* Fetch the information about the contact in the email.
178205
* (to know if they exist in the database...)
179206
*/
180-
const loadEmailContacts = async () => {
207+
const loadEmailContacts = async (autoOpen = true) => {
181208
const token = localStorage.getItem('odoo_access_token')
182209
if (!token?.length) {
183210
logout()
@@ -207,26 +234,42 @@ const App: React.FC<AppProps> = (_props: AppProps) => {
207234

208235
fetchTranslations()
209236
setEmailContacts(searchedPartners)
210-
if (searchedPartners.length === 1) {
237+
if (searchedPartners.length === 1 && autoOpen) {
211238
setPartner(searchedPartners[0])
212239
}
213240

241+
setLogged(true)
214242
setLoading(false)
215243
}
216244

217245
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]
246+
setPagesPartner((prevPages) => {
247+
if (prevPages.length === 2) {
248+
// the contact could have been created, reload the view
249+
setTimeout(() => loadEmailContacts(false))
250+
return []
251+
}
252+
const [page, _partner] = prevPages[prevPages.length - 1 - backCount]
225253
setCurrentPage(page)
226254
return prevPages.slice(0, prevPages.length - backCount)
227255
})
228256
}
229257

258+
const onRefresh = async () => {
259+
const partner = pagesPartner[pagesPartner.length - 1][1]
260+
const [newPartner, error] = await Partner.getPartner(
261+
partner.name,
262+
partner.email,
263+
partner.id
264+
)
265+
266+
if (error.code) {
267+
showError(error.message)
268+
return
269+
}
270+
updatePartner(newPartner)
271+
}
272+
230273
// set the logged state if needed, without blocking the rendering
231274
React.useEffect(() => {
232275
loadEmailContacts()
@@ -249,9 +292,10 @@ const App: React.FC<AppProps> = (_props: AppProps) => {
249292

250293
return (
251294
<div className={styles.root}>
252-
<div className={styles.header}>
253-
{pages.length > 1 && (
295+
{logged && (
296+
<div className={styles.header}>
254297
<Button
298+
disabled={pagesPartner.length <= 1}
255299
className={styles.goBack}
256300
icon={<ArrowLeftRegular />}
257301
title={_t('Go back')}
@@ -260,9 +304,48 @@ const App: React.FC<AppProps> = (_props: AppProps) => {
260304
appearance="subtle"
261305
onClick={() => goBack()}
262306
/>
263-
)}
264-
<GlobalLoading />
265-
</div>
307+
308+
<GlobalLoading />
309+
310+
<Menu>
311+
<MenuTrigger disableButtonEnhancement>
312+
<MenuButton
313+
appearance="subtle"
314+
icon={<MoreVerticalRegular />}
315+
size="medium"
316+
/>
317+
</MenuTrigger>
318+
319+
<MenuPopover>
320+
<MenuList>
321+
<MenuItem
322+
onClick={onRefresh}
323+
disabled={
324+
!pagesPartner.length ||
325+
!pagesPartner[
326+
pagesPartner.length - 1
327+
][1]
328+
}
329+
>
330+
<div className={styles.kebabButton}>
331+
<ArrowClockwiseRegular />
332+
<span>{_t('Refresh')}</span>
333+
</div>
334+
</MenuItem>
335+
<MenuItem
336+
className={styles.kebabButton}
337+
onClick={() => logout()}
338+
>
339+
<div className={styles.kebabButton}>
340+
<SignOutRegular />
341+
<span>{_t('Logout')}</span>
342+
</div>
343+
</MenuItem>
344+
</MenuList>
345+
</MenuPopover>
346+
</Menu>
347+
</div>
348+
)}
266349
{loading ? <Loading /> : currentPage}
267350
<Error />
268351
</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)