Skip to content

Commit b757989

Browse files
committed
Send push notifications according to users local timezone. resolves #138
1 parent a6a47f6 commit b757989

File tree

18 files changed

+365
-191
lines changed

18 files changed

+365
-191
lines changed

apps/tabler-app/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -149,4 +149,4 @@
149149
"typescript": "3.7.4",
150150
"typescript-tslint-plugin": "^0.5.5"
151151
}
152-
}
152+
}

apps/tabler-app/src/auth/ConfirmSignIn.tsx

+1-3
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import { parseLink } from '../helper/linking/parseLink';
1414
import { Categories, Logger } from '../helper/Logger';
1515
import { I18N } from '../i18n/translation';
1616
import { IAppState } from '../model/IAppState';
17-
import { restoreSettings, storeLanguage } from '../redux/actions/settings';
17+
import { restoreSettings } from '../redux/actions/settings';
1818
import { signin, singedIn } from '../redux/actions/user';
1919
import { Background, Greeting, Logo } from './Background';
2020
import Input from './Input';
@@ -26,7 +26,6 @@ type Props = {
2626
singedIn: typeof singedIn;
2727
signin: typeof signin,
2828
restoreSettings: typeof restoreSettings,
29-
storeLanguage: typeof storeLanguage,
3029
};
3130

3231
type State = {
@@ -228,6 +227,5 @@ export default connect(
228227
restoreSettings,
229228
singedIn,
230229
signin,
231-
storeLanguage,
232230
},
233231
)(withTheme(ConfirmBase));

apps/tabler-app/src/i18n/translation.ts

+3
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { I18NType } from './I18NType';
1010
import { pluralize, PluralizeFunc } from './pluralize';
1111
import DEFAULT_LANGUAGE from './translations/defaultLanguage';
1212
import { formatNumber, FormatNumberFunc } from './formatNumber';
13+
import * as Localization from 'expo-localization';
1314

1415
const logger = new Logger(Categories.App);
1516

@@ -29,6 +30,7 @@ export function replaceCurrentLanguage(otherLang: any) {
2930
// moment is loaded with all available locales
3031
moment.locale((currentLanguage as I18NType).id);
3132

33+
currentLanguage.timezone = Localization.timezone;
3234
currentLanguage.format = format;
3335
currentLanguage.pluralize = pluralize;
3436
currentLanguage.formatDate = formatDate;
@@ -66,6 +68,7 @@ loadLanguage(getAppLanguage());
6668

6769
// tslint:disable-next-line: export-name
6870
export const I18N: I18NType & {
71+
timezone: string,
6972
format: FormatFunc,
7073
formatDate: FormatDateFunc,
7174
pluralize: PluralizeFunc,

apps/tabler-app/src/model/graphql/AddressFragment.ts

+1
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,5 @@ export interface AddressFragment {
1313
street2: string | null;
1414
postal_code: string | null;
1515
city: string | null;
16+
country: string | null;
1617
}

apps/tabler-app/src/model/graphql/Club.ts

+2
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ export interface Club_Club_meetingplace1 {
4545
street2: string | null;
4646
postal_code: string | null;
4747
city: string | null;
48+
country: string | null;
4849
location: Club_Club_meetingplace1_location | null;
4950
}
5051

@@ -60,6 +61,7 @@ export interface Club_Club_meetingplace2 {
6061
street2: string | null;
6162
postal_code: string | null;
6263
city: string | null;
64+
country: string | null;
6365
location: Club_Club_meetingplace2_location | null;
6466
}
6567

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/* tslint:disable */
2+
/* eslint-disable */
3+
// @generated
4+
// This file was automatically generated and should not be edited.
5+
6+
import { SettingInput } from "./globalTypes";
7+
8+
// ====================================================
9+
// GraphQL mutation operation: PushTimezone
10+
// ====================================================
11+
12+
export interface PushTimezone {
13+
/**
14+
* Updates a setting
15+
*/
16+
putSetting: boolean | null;
17+
}
18+
19+
export interface PushTimezoneVariables {
20+
input: SettingInput;
21+
}

apps/tabler-app/src/model/graphql/globalTypes.ts

+1
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@ export enum SettingName {
8888
nearbymembers = "nearbymembers",
8989
nearbymembersMap = "nearbymembersMap",
9090
notifications = "notifications",
91+
timezone = "timezone",
9192
}
9293

9394
export enum UserRole {

apps/tabler-app/src/redux/actions/settings.ts

-4
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,3 @@ export const notificationState = createAction<'@@settings/notificationsAvailable
4141
export const restoreSettings = createAction<'@@settings/restoreSettings'>(
4242
'@@settings/restoreSettings',
4343
);
44-
45-
export const storeLanguage = createAction<'@@settings/storeLanguage'>(
46-
'@@settings/storeLanguage',
47-
);

apps/tabler-app/src/sagas/settings/pushLanguage.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import { I18N } from '../../i18n/translation';
77
import { SettingName } from '../../model/graphql/globalTypes';
88
import { Pushlanguage, PushlanguageVariables } from '../../model/graphql/Pushlanguage';
99

10-
export const LANGUAGE_KEY = 'Language';
10+
const LANGUAGE_KEY = 'setting:language';
1111

12-
export function* pushLanguage(/* _a: typeof settingsActions.storeLanguage.shape */) {
12+
export function* pushLanguage() {
1313
const client: ApolloClient<NormalizedCacheObject> = cachedAolloClient();
1414

1515
const existingLanguage = yield AsyncStorage.getItem(LANGUAGE_KEY);
@@ -18,7 +18,7 @@ export function* pushLanguage(/* _a: typeof settingsActions.storeLanguage.shape
1818
yield client.mutate<Pushlanguage, PushlanguageVariables>({
1919
mutation: gql`
2020
mutation Pushlanguage($input: SettingInput!) {
21-
putSetting (setting: $input)
21+
putSetting (setting: $input)
2222
}`,
2323
variables: {
2424
input: {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { NormalizedCacheObject } from 'apollo-cache-inmemory';
2+
import { ApolloClient } from 'apollo-client';
3+
import gql from 'graphql-tag';
4+
import { AsyncStorage } from 'react-native';
5+
import { cachedAolloClient } from '../../apollo/bootstrapApollo';
6+
import { I18N } from '../../i18n/translation';
7+
import { SettingName } from '../../model/graphql/globalTypes';
8+
import { PushTimezone, PushTimezoneVariables } from '../../model/graphql/PushTimezone';
9+
10+
const TIMEZONE_KEY = 'setting:timezone';
11+
12+
export function* pushTimezone() {
13+
const client: ApolloClient<NormalizedCacheObject> = cachedAolloClient();
14+
15+
const kownTimezone = yield AsyncStorage.getItem(TIMEZONE_KEY);
16+
const value = I18N.timezone;
17+
18+
if (kownTimezone !== value) {
19+
yield client.mutate<PushTimezone, PushTimezoneVariables>({
20+
mutation: gql`
21+
mutation PushTimezone($input: SettingInput!) {
22+
putSetting (setting: $input)
23+
}`,
24+
variables: {
25+
input: {
26+
value,
27+
name: SettingName.timezone,
28+
},
29+
},
30+
});
31+
32+
yield AsyncStorage.setItem(TIMEZONE_KEY, value);
33+
}
34+
}

apps/tabler-app/src/sagas/settingsSaga.ts

-2
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import * as filterActions from '../redux/actions/filter';
44
import * as settingsActions from '../redux/actions/settings';
55
import { checkAndDisableNotifications } from './settings/checkAndDisableNotifications';
66
import { checkLinking } from './settings/checkLinking';
7-
import { pushLanguage } from './settings/pushLanguage';
87
import { restoreSettingsFromCloud } from './settings/restoreSettingsFromCloud';
98
import { saveFavoritesToCloud } from './settings/saveFavoritesToCloud';
109
import { saveNotificationSettingsToCloud } from './settings/saveNotificationSettingsToCloud';
@@ -16,7 +15,6 @@ export function* settingsSaga(): SagaIterator {
1615

1716
// restore settings
1817
takeLatest(settingsActions.restoreSettings.type, restoreSettingsFromCloud),
19-
takeLatest(settingsActions.storeLanguage.type, pushLanguage),
2018

2119
// mark record as modified on favorite toggle
2220
debounce(

apps/tabler-app/src/sagas/startup/syncAllSettings.ts

+3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { IAppState } from '../../model/IAppState';
44
import { AuthState } from '../../model/state/AuthState';
55
import { singedIn } from '../../redux/actions/user';
66
import { pushLanguage } from '../settings/pushLanguage';
7+
import { pushTimezone } from '../settings/pushTimezone';
78
import { restoreSettingsFromCloud } from '../settings/restoreSettingsFromCloud';
89
import { logger } from './logger';
910

@@ -19,5 +20,7 @@ export function* syncAllSettings() {
1920
yield updateParameters();
2021

2122
yield fork(pushLanguage);
23+
yield fork(pushTimezone);
24+
2225
yield fork(restoreSettingsFromCloud);
2326
}

0 commit comments

Comments
 (0)