Skip to content

Commit

Permalink
feat: settings enhancement
Browse files Browse the repository at this point in the history
  • Loading branch information
giuliano176 committed Mar 14, 2022
1 parent 52ab474 commit 73c69d5
Show file tree
Hide file tree
Showing 8 changed files with 102 additions and 83 deletions.
7 changes: 6 additions & 1 deletion src/app.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import { SyncDataHandler } from './views/sidebar/sync-data-handler';
import { mailToSharedFunction, openComposerSharedFunction } from './integrations/shared-functions';
import Notifications from './views/notifications';
import { ParticipantRole } from './types/participant';
import { MAILS_ROUTE, MAIL_APP_ID } from './constants';
import { MAILS_ROUTE, MAIL_APP_ID, settingsSubSections } from './constants';

const LazyAppView = lazy(() =>
import(/* webpackChunkName: "mails-folder-panel-view" */ './views/app-view')
Expand Down Expand Up @@ -85,6 +85,11 @@ const App = () => {
addSettingsView({
route: MAILS_ROUTE,
label: t('label.app_name', 'Mails'),
subSections: settingsSubSections.map((item) => ({
id: t(item.label, item.fallback).replace(/\s/g, ''),
label: t(item.label, item.fallback)
})),

component: SettingsView
});
addSearchView({
Expand Down
21 changes: 21 additions & 0 deletions src/constants/index.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -212,3 +212,24 @@ export const emailStatusItemsConstant = [
];

export const MAIL_APP_ID = 'carbonio-mails-ui';

export const settingsSubSections = [
{
label: 'settings.label.display_messages',
fallback: 'Displaying Messages'
},
{
label: 'label.receive_message',
fallback: 'Receiving Messages'
},
{
label: 'signatures.signature_heading',
fallback: 'Signatures'
},
{
label: 'label.set_default_signatures',
fallback: 'Set Default Signatures'
},

{ label: 'filters.filters', fallback: 'Filters' }
];
16 changes: 11 additions & 5 deletions src/views/settings/displaying-messages-settings.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ import {
FormSubSection,
Select,
Input,
Checkbox,
Padding
Checkbox
} from '@zextras/carbonio-design-system';
import Heading from './components/settings-heading';
import {
Expand All @@ -21,6 +20,7 @@ import {
findLabel,
ConversationSortingSettings
} from './components/utils';
import { settingsSubSections } from '../../constants';

export default function DisplayingMessagesSettings({ t, settingsObj, updateSettings }) {
const checkNewMailOptions = useMemo(
Expand All @@ -35,11 +35,15 @@ export default function DisplayingMessagesSettings({ t, settingsObj, updateSetti
const displayMailOptions = useMemo(() => DisplayMailOptions(t), [t]);
const messageSelectionOptions = useMemo(() => MessageSelectionOptions(t), [t]);
const conversationSortingSettings = useMemo(() => ConversationSortingSettings(t), [t]);

const sectionTitle = useMemo(
() => t(settingsSubSections[0].label, settingsSubSections[0].fallback),
[t]
);
return (
<FormSubSection
label={t('settings.label.display_messages', 'Displaying Messages')}
label={sectionTitle}
padding={{ all: 'medium' }}
id={sectionTitle.replace(/\s/g, '')}
>
<Row width="100%" padding={{ horizontal: 'small', vertical: 'small' }}>
<Select
Expand Down Expand Up @@ -73,7 +77,9 @@ export default function DisplayingMessagesSettings({ t, settingsObj, updateSetti
label={t('settings.label.display_mail', 'Display mail')}
items={displayMailOptions}
onChange={(view) =>
updateSettings({ target: { name: 'zimbraPrefMessageViewHtmlPreferred', value: view } })
updateSettings({
target: { name: 'zimbraPrefMessageViewHtmlPreferred', value: view }
})
}
defaultSelection={{
label: findLabel(displayMailOptions, settingsObj.zimbraPrefMessageViewHtmlPreferred),
Expand Down
48 changes: 27 additions & 21 deletions src/views/settings/filters/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,37 +3,43 @@
*
* SPDX-License-Identifier: AGPL-3.0-only
*/
import React, { FC, ReactElement } from 'react';
import React, { FC, ReactElement, useMemo } from 'react';
import { Container, Text, Divider } from '@zextras/carbonio-design-system';
import { TFunction } from 'i18next';
import FilterTabs from './parts/filter-tabs';
import Heading from '../components/settings-heading';
import { settingsSubSections } from '../../../constants';

type ComponentProps = {
t: TFunction;
};

const FilterModule: FC<ComponentProps> = ({ t }): ReactElement => (
<Container background="gray6" padding={{ horizontal: 'medium', bottom: 'large' }}>
<Container
orientation="horizontal"
padding={{ horizontal: 'medium', top: 'medium' }}
mainAllignment="space-between"
>
<Container width="50%">
<Heading title={t('filters.filters', 'Filters')} size="medium" />
const FilterModule: FC<ComponentProps> = ({ t }): ReactElement => {
const sectionTitle = useMemo(
() => t(settingsSubSections[4].label, settingsSubSections[4].fallback),
[t]
);
return (
<Container background="gray6" padding={{ horizontal: 'medium', bottom: 'large' }}>
<Container
orientation="horizontal"
padding={{ horizontal: 'medium', top: 'medium' }}
mainAllignment="space-between"
>
<Container width="50%" id={sectionTitle}>
<Heading title={sectionTitle} size="medium" />
</Container>
<Container width="50%" crossAlignment="flex-end">
<Text size="extrasmall">
{t('filters.filter_note', 'Note: changes to filter rules are saved immediately')}
</Text>
</Container>
</Container>
<Container width="50%" crossAlignment="flex-end">
<Text size="extrasmall">
{t('filters.filter_note', 'Note: changes to filter rules are saved immediately')}
</Text>
<Divider />
<Container padding={{ all: 'medium', bottom: 'small' }}>
<FilterTabs t={t} />
</Container>
</Container>
<Divider />
<Container padding={{ all: 'medium', bottom: 'small' }}>
<FilterTabs t={t} />
</Container>
</Container>
);

);
};
export default FilterModule;
11 changes: 9 additions & 2 deletions src/views/settings/receiving-messages-settings.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,19 @@ import {
} from '@zextras/carbonio-design-system';
import Heading from './components/settings-heading';
import { NotifyFolderOpts, ReadReceiptOpts, MsgsFromMeOpts, findLabel } from './components/utils';
import { settingsSubSections } from '../../constants';

export default function ReceivingMessagesSettings({ t, settingsObj, updateSettings }) {
const notifyFolderOptn = useMemo(() => NotifyFolderOpts(t), [t]);
const readReceiptOptn = useMemo(() => ReadReceiptOpts(t), [t]);
const msgsFromMeOpts = useMemo(() => MsgsFromMeOpts(t), [t]);
const sectionTitle = useMemo(
() => t(settingsSubSections[1].label, settingsSubSections[1].fallback),
[t]
);

return (
<FormSubSection label={t('label.receive_message', 'Receiving Messages')}>
<FormSubSection label={sectionTitle} id={sectionTitle.replace(/\s/g, '')}>
<Container crossAlignment="baseline" padding={{ all: 'small' }}>
<Heading title="Message Arrival" />
<Input
Expand Down Expand Up @@ -114,7 +119,9 @@ export default function ReceivingMessagesSettings({ t, settingsObj, updateSettin
items={msgsFromMeOpts}
name="zimbraPrefDedupeMessagesSentToSelf"
onChange={(view) =>
updateSettings({ target: { name: 'zimbraPrefDedupeMessagesSentToSelf', value: view } })
updateSettings({
target: { name: 'zimbraPrefDedupeMessagesSentToSelf', value: view }
})
}
defaultSelection={{
label: findLabel(msgsFromMeOpts, settingsObj.zimbraPrefDedupeMessagesSentToSelf),
Expand Down
64 changes: 12 additions & 52 deletions src/views/settings/settings-view.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,15 @@
* SPDX-License-Identifier: AGPL-3.0-only
*/
import React, { useState, useMemo, useCallback, useContext } from 'react';
import { useUserSettings, useUserAccount, editSettings } from '@zextras/carbonio-shell-ui';
import {
useUserSettings,
useUserAccount,
editSettings,
SettingsHeader
} from '@zextras/carbonio-shell-ui';
import { useDispatch } from 'react-redux';
import { map, forEach, isEqual, filter, find, cloneDeep } from 'lodash';
import {
Container,
Padding,
Text,
Button,
Row,
Divider,
FormSection,
SnackbarManagerContext
} from '@zextras/carbonio-design-system';
import { Container, FormSection, SnackbarManagerContext } from '@zextras/carbonio-design-system';
import { useTranslation } from 'react-i18next';
import { differenceObject } from './components/utils';
import DisplayMessagesSettings from './displaying-messages-settings';
Expand Down Expand Up @@ -226,49 +222,13 @@ export default function SettingsView() {
});
}
}, [signItems, signItemsUpdated, settingsToUpdate, dispatch, account, createSnackbar, t, flag]);

const title = useMemo(() => t('label.mail_settings', 'Mails settings'), [t]);
return loading ? (
<LoadingShimmer />
) : (
<Container
orientation="vertical"
mainAlignment="space-around"
background="gray5"
style={{ overflowY: 'auto' }}
>
<Row orientation="horizontal" width="100%">
<Row
padding={{ all: 'small' }}
mainAlignment="flex-start"
width="50%"
crossAlignment="flex-start"
>
<Text size="large" weight="regular">
{t('label.mail_settings', 'Mails settings')}
</Text>
</Row>
<Row
padding={{ all: 'small' }}
width="50%"
mainAlignment="flex-end"
crossAlignment="flex-end"
>
<Padding right="small">
<Button
label={t('label.discard_changes', 'DISCARD CHANGES')}
onClick={onClose}
color="secondary"
disabled={isDisabled}
/>
</Padding>
<Button
label={t('label.save', 'Save')}
color="primary"
onClick={saveChanges}
disabled={isDisabled}
/>
</Row>
</Row>
<Divider />
<>
<SettingsHeader onSave={saveChanges} onCancel={onClose} isDirty={!isDisabled} title={title} />
<Container
orientation="vertical"
mainAlignment="baseline"
Expand Down Expand Up @@ -302,6 +262,6 @@ export default function SettingsView() {
<FilterModule t={t} />
</FormSection>
</Container>
</Container>
</>
);
}
17 changes: 15 additions & 2 deletions src/views/settings/signature-settings.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import styled from 'styled-components';

import { useIntegratedComponent, useUserAccount } from '@zextras/carbonio-shell-ui';
import { map, find, findIndex, merge, escape, unescape } from 'lodash';
import { settingsSubSections } from '../../constants';
import Heading from './components/settings-heading';
import { GetAllSignatures } from '../../store/actions/signatures';
import { getSignatures } from '../../store/editor-slice-utils';
Expand Down Expand Up @@ -213,12 +214,21 @@ export default function SignatureSettings({
);
};
const [Composer, composerIsAvailable] = useIntegratedComponent('composer');
const sectionTitleSignatures = useMemo(
() => t(settingsSubSections[2].label, settingsSubSections[2].fallback),
[t]
);
const sectionTitleSetSignatures = useMemo(
() => t(settingsSubSections[3].label, settingsSubSections[3].fallback),
[t]
);

return (
<>
<FormSubSection
label={t('signatures.signature_heading', 'Signatures')}
label={sectionTitleSignatures}
padding={{ all: 'large' }}
id={sectionTitleSignatures.replace(/\s/g, '')}
>
<Container crossAlignment="flex-start" orientation="horizontal" padding={{ all: 'medium' }}>
<Container width="25%" padding={{ right: 'medium' }}>
Expand Down Expand Up @@ -279,7 +289,10 @@ export default function SignatureSettings({
</Container>
</Container>
</FormSubSection>
<FormSubSection label="Set Default Signatures">
<FormSubSection
label={sectionTitleSetSignatures}
id={sectionTitleSetSignatures.replace(/\s/g, '')}
>
<Container crossAlignment="baseline" padding={{ all: 'small' }}>
<Heading title={t('title.new_messages', 'New Messages')} />
<Select
Expand Down
1 change: 1 addition & 0 deletions translations/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -269,6 +269,7 @@
"sending": "Sending",
"sent": "Sent",
"sent_to_address": "Sent to (address)",
"set_default_signatures": "Set Default Signatures",
"share": "Share",
"shared_folders": "Shared Folders",
"shared_item": "Shared item",
Expand Down

0 comments on commit 73c69d5

Please sign in to comment.