Skip to content

Commit c241c3b

Browse files
Merge pull request #2275 from zetkin/release-241019
241019 Release
2 parents 4392ce6 + 13551d1 commit c241c3b

File tree

14 files changed

+524
-230
lines changed

14 files changed

+524
-230
lines changed

src/core/Providers.tsx

Lines changed: 25 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import { AdapterDayjs } from '@mui/x-date-pickers-pro/AdapterDayjs';
2+
import { CacheProvider } from '@emotion/react';
3+
import createCache from '@emotion/cache';
24
import { DndProvider } from 'react-dnd';
35
import { HTML5Backend } from 'react-dnd-html5-backend';
46
import { IntlProvider } from 'react-intl';
@@ -56,30 +58,34 @@ const Providers: FC<ProvidersProps> = ({
5658
};
5759
}
5860

61+
const cache = createCache({ key: 'css', prepend: true });
62+
5963
return (
6064
<ReduxProvider store={store}>
6165
<EnvProvider env={env}>
6266
<UserContext.Provider value={user}>
6367
<StyledEngineProvider injectFirst>
64-
<ThemeProvider theme={themeWithLocale(lang)}>
65-
<LocalizationProvider dateAdapter={AdapterDayjs}>
66-
<IntlProvider
67-
defaultLocale="en"
68-
locale={lang}
69-
messages={messages}
70-
>
71-
<ZUISnackbarProvider>
72-
<ZUIConfirmDialogProvider>
73-
<EventPopperProvider>
74-
<DndProvider backend={HTML5Backend}>
75-
{children}
76-
</DndProvider>
77-
</EventPopperProvider>
78-
</ZUIConfirmDialogProvider>
79-
</ZUISnackbarProvider>
80-
</IntlProvider>
81-
</LocalizationProvider>
82-
</ThemeProvider>
68+
<CacheProvider value={cache}>
69+
<ThemeProvider theme={themeWithLocale(lang)}>
70+
<LocalizationProvider dateAdapter={AdapterDayjs}>
71+
<IntlProvider
72+
defaultLocale="en"
73+
locale={lang}
74+
messages={messages}
75+
>
76+
<ZUISnackbarProvider>
77+
<ZUIConfirmDialogProvider>
78+
<EventPopperProvider>
79+
<DndProvider backend={HTML5Backend}>
80+
{children}
81+
</DndProvider>
82+
</EventPopperProvider>
83+
</ZUIConfirmDialogProvider>
84+
</ZUISnackbarProvider>
85+
</IntlProvider>
86+
</LocalizationProvider>
87+
</ThemeProvider>
88+
</CacheProvider>
8389
</StyledEngineProvider>
8490
</UserContext.Provider>
8591
</EnvProvider>

src/core/env/ClientContext.tsx

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
'use client';
22

33
import CssBaseline from '@mui/material/CssBaseline';
4+
import { CacheProvider } from '@emotion/react';
5+
import createCache from '@emotion/cache';
46
import { IntlProvider } from 'react-intl';
57
import { Provider as ReduxProvider } from 'react-redux';
68
import { FC, ReactNode } from 'react';
@@ -52,24 +54,27 @@ const ClientContext: FC<ClientContextProps> = ({
5254
: new BrowserApiClient();
5355

5456
const env = new Environment(apiClient, envVars);
57+
const cache = createCache({ key: 'css', prepend: true });
5558

5659
return (
5760
<ReduxProvider store={store}>
5861
<StyledEngineProvider injectFirst>
59-
<ThemeProvider theme={themeWithLocale(lang)}>
60-
<EnvProvider env={env}>
61-
<UserProvider user={user}>
62-
<IntlProvider
63-
defaultLocale="en"
64-
locale={lang}
65-
messages={messages}
66-
>
67-
<CssBaseline />
68-
{children}
69-
</IntlProvider>
70-
</UserProvider>
71-
</EnvProvider>
72-
</ThemeProvider>
62+
<CacheProvider value={cache}>
63+
<ThemeProvider theme={themeWithLocale(lang)}>
64+
<EnvProvider env={env}>
65+
<UserProvider user={user}>
66+
<IntlProvider
67+
defaultLocale="en"
68+
locale={lang}
69+
messages={messages}
70+
>
71+
<CssBaseline />
72+
{children}
73+
</IntlProvider>
74+
</UserProvider>
75+
</EnvProvider>
76+
</ThemeProvider>
77+
</CacheProvider>
7378
</StyledEngineProvider>
7479
</ReduxProvider>
7580
);

src/features/calendar/components/utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ export function getDstChangeAtDate(date: dayjs.Dayjs): DSTChange | undefined {
287287
if (change === 0) {
288288
return undefined;
289289
}
290-
return change > 0 ? 'summertime' : 'wintertime';
290+
return change > 0 ? 'wintertime' : 'summertime';
291291
}
292292

293293
export function getTimezoneAtDate(date: dayjs.Dayjs): number {

src/features/campaigns/components/CampaignActionButtons.tsx

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -92,20 +92,20 @@ const CampaignActionButtons: React.FunctionComponent<
9292
const menuItems = [
9393
{
9494
icon: <Event />,
95-
label: messages.linkGroup.createEvent(),
95+
label: messages.createButton.createEvent(),
9696
onClick: handleCreateEvent,
9797
},
9898
{
9999
icon: <HeadsetMic />,
100-
label: messages.linkGroup.createCallAssignment(),
100+
label: messages.createButton.createCallAssignment(),
101101
onClick: () =>
102102
createCallAssignment({
103103
title: messages.form.createCallAssignment.newCallAssignment(),
104104
}),
105105
},
106106
{
107107
icon: <AssignmentOutlined />,
108-
label: messages.linkGroup.createSurvey(),
108+
label: messages.createButton.createSurvey(),
109109
onClick: () =>
110110
createSurvey({
111111
signature: 'require_signature',
@@ -114,15 +114,15 @@ const CampaignActionButtons: React.FunctionComponent<
114114
},
115115
{
116116
icon: <CheckBoxOutlined />,
117-
label: messages.linkGroup.createTask(),
117+
label: messages.createButton.createTask(),
118118
onClick: () => setCreateTaskDialogOpen(true),
119119
},
120120
];
121121

122122
if (hasCanvassing) {
123123
menuItems.push({
124124
icon: <Map />,
125-
label: messages.linkGroup.createCanvassAssignment(),
125+
label: messages.createButton.createCanvassAssignment(),
126126
onClick: () =>
127127
createCanvassAssignment({
128128
campaign_id: campaign.id,
@@ -134,7 +134,7 @@ const CampaignActionButtons: React.FunctionComponent<
134134
if (organization.email && themes.length > 0) {
135135
menuItems.push({
136136
icon: <EmailOutlined />,
137-
label: messages.linkGroup.createEmail(),
137+
label: messages.createButton.createEmail(),
138138
onClick: () =>
139139
createEmail({
140140
campaign_id: campId,
@@ -149,7 +149,7 @@ const CampaignActionButtons: React.FunctionComponent<
149149
<Box>
150150
<ZUIButtonMenu
151151
items={menuItems}
152-
label={messages.linkGroup.createActivity()}
152+
label={messages.createButton.createActivity()}
153153
/>
154154
</Box>
155155
<Box>

src/features/campaigns/l10n/messageIds.ts

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,15 @@ export default makeMessages('feat.campaigns', {
5959
},
6060
assigneeActions: m('Assignee actions'),
6161
calendarView: m('See all in calendar'),
62+
createButton: {
63+
createActivity: m('Create'),
64+
createCallAssignment: m('Call assignment'),
65+
createCanvassAssignment: m('Canvass assignment'),
66+
createEmail: m('Email'),
67+
createEvent: m('Event'),
68+
createSurvey: m('Survey'),
69+
createTask: m('Task'),
70+
},
6271
events: m('Events'),
6372
feedback: {
6473
copy: m(
@@ -127,13 +136,13 @@ export default makeMessages('feat.campaigns', {
127136
overview: m('Overview'),
128137
},
129138
linkGroup: {
130-
createActivity: m('Create activity'),
131-
createCallAssignment: m('Create call assignment'),
132-
createCanvassAssignment: m('Create canvass assignment'),
133-
createEmail: m('Create email'),
134-
createEvent: m('Create event'),
135-
createSurvey: m('Create survey'),
136-
createTask: m('Create task'),
139+
createActivity: m('Create'),
140+
createCallAssignment: m('Call assignment'),
141+
createCanvassAssignment: m('Canvass assignment'),
142+
createEmail: m('Email'),
143+
createEvent: m('Event'),
144+
createSurvey: m('Survey'),
145+
createTask: m('Task'),
137146
public: m('Public Page'),
138147
settings: m('Edit Settings'),
139148
},

src/features/duplicates/components/ConfigureModal.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ const ConfigureModal: FC<ConfigureModalProps> = ({
5050
(person) => !selectedIds.includes(person.id)
5151
);
5252

53-
const { fieldValues, initialOverrides } = useFieldSettings(peopleToMerge);
53+
const { hasConflictingValues, fieldValues, initialOverrides } =
54+
useFieldSettings(peopleToMerge);
5455
const [overrides, setOverrides] = useState(initialOverrides);
5556

5657
useEffect(() => {
@@ -96,10 +97,12 @@ const ConfigureModal: FC<ConfigureModalProps> = ({
9697
}}
9798
/>
9899
<Box marginBottom={2} />
99-
<Alert severity="info">
100-
<AlertTitle>{messages.modal.infoTitle()}</AlertTitle>
101-
{messages.modal.infoMessage()}
102-
</Alert>
100+
{hasConflictingValues && (
101+
<Alert severity="warning">
102+
<AlertTitle>{messages.modal.warningTitle()}</AlertTitle>
103+
{messages.modal.warningMessage()}
104+
</Alert>
105+
)}
103106
</Box>
104107
</Box>
105108
<DialogActions sx={{ p: 2 }}>

src/features/duplicates/hooks/useFieldSettings.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,5 +39,13 @@ export default function useFieldSettings(duplicates: ZetkinPerson[]) {
3939
}
4040
});
4141

42-
return { fieldValues, initialOverrides };
42+
function entryContainsOneValue(entry: Array<string | string[]>) {
43+
return entry[1].length < 2;
44+
}
45+
46+
const hasConflictingValues = !Object.entries(fieldValues).every(
47+
entryContainsOneValue
48+
);
49+
50+
return { fieldValues, hasConflictingValues, initialOverrides };
4351
}

src/features/duplicates/l10n/messageIds.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,6 @@ export default makeMessages('feat.duplicates', {
1414
noValue: m('No value'),
1515
title: m('Data to merge'),
1616
},
17-
infoMessage: m(
18-
'All activity history and tags from all people being merged will carry over and will be visible on the merged person.'
19-
),
20-
infoTitle: m('No data will be lost'),
2117
isDuplicateButton: m('Include'),
2218
mergeButton: m('Merge'),
2319
notDuplicateButton: m('Exclude'),
@@ -29,6 +25,10 @@ export default makeMessages('feat.duplicates', {
2925
phone: m('Phone'),
3026
},
3127
title: m('Merge duplicates'),
28+
warningMessage: m(
29+
'All data related to any of the person records will transfer to the merged person. This includes event participation, survey submissions, tags etc. But the values you discard in the fields above will be lost.'
30+
),
31+
warningTitle: m('Risk of data loss'),
3232
},
3333
page: {
3434
dismiss: m('Dismiss'),

0 commit comments

Comments
 (0)