all repos — caroster @ fb3582f75db52c6a6c3a154ce7bc038d1dc0921e

[Octree] Group carpool to your event https://caroster.io

feat: ✨ Announcement supports English and French
Simon Mulquin simon@octree.ch
Thu, 16 Jun 2022 07:47:04 +0000
commit

fb3582f75db52c6a6c3a154ce7bc038d1dc0921e

parent

649b38a11d20cec38f1990bbb7adf5cf651aab44

M backend/.strapi-updater.jsonbackend/.strapi-updater.json

@@ -1,5 +1,5 @@

{ - "latest": "3.6.10", - "lastUpdateCheck": 1655278117505, - "lastNotification": 1655278102398 -}+ "latest": "3.6.10", + "lastUpdateCheck": 1655278117505, + "lastNotification": 1655278102398 +}
M backend/api/settings/models/settings.settings.jsonbackend/api/settings/models/settings.settings.json

@@ -10,19 +10,44 @@ "increments": true,

"timestamps": true, "draftAndPublish": false }, + "pluginOptions": { + "i18n": { + "localized": true + } + }, "attributes": { "gtm_id": { "type": "string", - "regex": "GTM-.*" + "regex": "GTM-.*", + "pluginOptions": { + "i18n": { + "localized": false + } + } }, "about_link": { - "type": "string" + "type": "string", + "pluginOptions": { + "i18n": { + "localized": false + } + } }, "announcement": { - "type": "richtext" + "type": "richtext", + "pluginOptions": { + "i18n": { + "localized": true + } + } }, "faq_link": { - "type": "string" + "type": "string", + "pluginOptions": { + "i18n": { + "localized": false + } + } } } }
M backend/package.jsonbackend/package.json

@@ -35,6 +35,7 @@ "strapi-plugin-content-type-builder": "3.6.8",

"strapi-plugin-email": "^3.6.8", "strapi-plugin-email-designer": "^1.1.3", "strapi-plugin-graphql": "3.6.8", + "strapi-plugin-i18n": "3.6.8", "strapi-plugin-upload": "^3.6.8", "strapi-plugin-users-permissions": "3.6.8", "strapi-provider-email-sendgrid": "^3.6.8",
M backend/yarn.lockbackend/yarn.lock

@@ -10085,7 +10085,7 @@ integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==

dependencies: find-up "^4.0.0" -pluralize@^8.0.0: +pluralize@8.0.0, pluralize@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==

@@ -12461,6 +12461,16 @@ graphql-upload "11.0.0"

koa-compose "^4.1.0" lodash "4.17.21" pluralize "^8.0.0" + strapi-utils "3.6.8" + +strapi-plugin-i18n@3.6.8: + version "3.6.8" + resolved "https://registry.yarnpkg.com/strapi-plugin-i18n/-/strapi-plugin-i18n-3.6.8.tgz#2e4d7f96923defa3525204846ccafbb9f15d1b11" + integrity sha512-741hMHEJQ+Yji5TPxTkw32PZnfp692LjeQjPzROWIPHD8JZ3nG7xpbaF/cUsV86jOCveeBV76oHutI5qBWn3rA== + dependencies: + lodash "4.17.21" + p-map "4.0.0" + pluralize "8.0.0" strapi-utils "3.6.8" strapi-plugin-upload@^3.6.8:
M frontend/containers/GenericToolbar/index.tsxfrontend/containers/GenericToolbar/index.tsx

@@ -13,7 +13,6 @@ import {ActionType} from '../GenericMenu/Action';

import useBannerStore from '../../stores/useBannerStore'; import Banner from '../../components/Banner'; import useSettings from '../../hooks/useSettings'; -import useLangStore from '../../stores/useLangStore'; const GenericToolbar = ({ title,

@@ -28,7 +27,6 @@ const router = useRouter();

const [anchorEl, setAnchorEl] = useState(null); const bannerOffset = useBannerStore(s => s.offset); const bannerHeight = useBannerStore(s => s.height); - const language = useLangStore(s => s.language); const classes = useStyles({bannerOffset, bannerHeight}); const {user} = useProfile(); const settings = useSettings();

@@ -39,7 +37,6 @@ : ''

); const announcement = settings?.announcement || ''; const showAnnouncement = - language === 'FR' && announcement !== '' && announcement !== lastAnnouncementSeen;
M frontend/generated/graphql.tsxfrontend/generated/graphql.tsx

@@ -107,6 +107,7 @@ position?: Maybe<Scalars['JSON']>;

uuid?: Maybe<Scalars['String']>; waitingList?: Maybe<Array<Maybe<ComponentPassengerPassenger>>>; description?: Maybe<Scalars['String']>; + newsletter?: Maybe<Scalars['Boolean']>; users?: Maybe<Array<Maybe<UsersPermissionsUser>>>; travels?: Maybe<Array<Maybe<Travel>>>; waitingPassengers?: Maybe<Array<Maybe<Passenger>>>;

@@ -191,6 +192,12 @@ key?: Maybe<Scalars['String']>;

connection?: Maybe<EventConnection>; }; +export type EventConnectionNewsletter = { + __typename?: 'EventConnectionNewsletter'; + key?: Maybe<Scalars['Boolean']>; + connection?: Maybe<EventConnection>; +}; + export type EventConnectionPosition = { __typename?: 'EventConnectionPosition'; key?: Maybe<Scalars['JSON']>;

@@ -221,6 +228,7 @@ address?: Maybe<Array<Maybe<EventConnectionAddress>>>;

position?: Maybe<Array<Maybe<EventConnectionPosition>>>; uuid?: Maybe<Array<Maybe<EventConnectionUuid>>>; description?: Maybe<Array<Maybe<EventConnectionDescription>>>; + newsletter?: Maybe<Array<Maybe<EventConnectionNewsletter>>>; }; export type EventInput = {

@@ -235,9 +243,9 @@ waitingList?: Maybe<Array<Maybe<ComponentPassengerPassengerInput>>>;

travels?: Maybe<Array<Maybe<Scalars['ID']>>>; description?: Maybe<Scalars['String']>; waitingPassengers?: Maybe<Array<Maybe<Scalars['ID']>>>; + newsletter?: Maybe<Scalars['Boolean']>; created_by?: Maybe<Scalars['ID']>; updated_by?: Maybe<Scalars['ID']>; - newsletter?: Maybe<Scalars['Boolean']>; }; export type FileInfoInput = {

@@ -264,6 +272,15 @@ provider_metadata?: Maybe<Scalars['JSON']>;

related?: Maybe<Array<Maybe<Scalars['ID']>>>; created_by?: Maybe<Scalars['ID']>; updated_by?: Maybe<Scalars['ID']>; +}; + +export type I18NLocale = { + __typename?: 'I18NLocale'; + id: Scalars['ID']; + created_at: Scalars['DateTime']; + updated_at: Scalars['DateTime']; + name?: Maybe<Scalars['String']>; + code?: Maybe<Scalars['String']>; }; export type Info = {

@@ -293,8 +310,15 @@ uuid: Scalars['String'];

}; +export type LocaleInput = { + name?: Maybe<Scalars['String']>; + code?: Maybe<Scalars['String']>; + created_by?: Maybe<Scalars['ID']>; + updated_by?: Maybe<Scalars['ID']>; +}; -export type Morph = Dependency | Info | UsersPermissionsMe | UsersPermissionsMeRole | UsersPermissionsLoginPayload | UserPermissionsPasswordPayload | Event | EventConnection | EventAggregator | EventGroupBy | EventConnectionId | EventConnectionCreated_At | EventConnectionUpdated_At | EventConnectionName | EventConnectionEmail | EventConnectionDate | EventConnectionAddress | EventConnectionPosition | EventConnectionUuid | EventConnectionDescription | CreateEventPayload | UpdateEventPayload | DeleteEventPayload | Page | PageConnection | PageAggregator | PageGroupBy | PageConnectionId | PageConnectionCreated_At | PageConnectionUpdated_At | PageConnectionName | PageConnectionContent | PageConnectionType | CreatePagePayload | UpdatePagePayload | DeletePagePayload | Passenger | PassengerConnection | PassengerAggregator | PassengerGroupBy | PassengerConnectionId | PassengerConnectionCreated_At | PassengerConnectionUpdated_At | PassengerConnectionName | PassengerConnectionEmail | PassengerConnectionLocation | PassengerConnectionUser | PassengerConnectionEvent | PassengerConnectionTravel | CreatePassengerPayload | UpdatePassengerPayload | DeletePassengerPayload | Settings | UpdateSettingPayload | DeleteSettingPayload | Travel | TravelConnection | TravelAggregator | TravelAggregatorSum | TravelAggregatorAvg | TravelAggregatorMin | TravelAggregatorMax | TravelGroupBy | TravelConnectionId | TravelConnectionCreated_At | TravelConnectionUpdated_At | TravelConnectionMeeting | TravelConnectionDeparture | TravelConnectionDetails | TravelConnectionEvent | TravelConnectionVehicleName | TravelConnectionSeats | TravelConnectionPhone_Number | CreateTravelPayload | UpdateTravelPayload | DeleteTravelPayload | Vehicle | VehicleConnection | VehicleAggregator | VehicleAggregatorSum | VehicleAggregatorAvg | VehicleAggregatorMin | VehicleAggregatorMax | VehicleGroupBy | VehicleConnectionId | VehicleConnectionCreated_At | VehicleConnectionUpdated_At | VehicleConnectionName | VehicleConnectionSeats | VehicleConnectionPhone_Number | VehicleConnectionUser | CreateVehiclePayload | UpdateVehiclePayload | DeleteVehiclePayload | EmailDesignerEmailTemplate | UploadFile | UploadFileConnection | UploadFileAggregator | UploadFileAggregatorSum | UploadFileAggregatorAvg | UploadFileAggregatorMin | UploadFileAggregatorMax | UploadFileGroupBy | UploadFileConnectionId | UploadFileConnectionCreated_At | UploadFileConnectionUpdated_At | UploadFileConnectionName | UploadFileConnectionAlternativeText | UploadFileConnectionCaption | UploadFileConnectionWidth | UploadFileConnectionHeight | UploadFileConnectionFormats | UploadFileConnectionHash | UploadFileConnectionExt | UploadFileConnectionMime | UploadFileConnectionSize | UploadFileConnectionUrl | UploadFileConnectionPreviewUrl | UploadFileConnectionProvider | UploadFileConnectionProvider_Metadata | DeleteFilePayload | UsersPermissionsPermission | UsersPermissionsRole | UsersPermissionsRoleConnection | UsersPermissionsRoleAggregator | UsersPermissionsRoleGroupBy | UsersPermissionsRoleConnectionId | UsersPermissionsRoleConnectionName | UsersPermissionsRoleConnectionDescription | UsersPermissionsRoleConnectionType | CreateRolePayload | UpdateRolePayload | DeleteRolePayload | UsersPermissionsUser | UsersPermissionsUserConnection | UsersPermissionsUserAggregator | UsersPermissionsUserGroupBy | UsersPermissionsUserConnectionId | UsersPermissionsUserConnectionCreated_At | UsersPermissionsUserConnectionUpdated_At | UsersPermissionsUserConnectionUsername | UsersPermissionsUserConnectionFirstName | UsersPermissionsUserConnectionLastName | UsersPermissionsUserConnectionEmail | UsersPermissionsUserConnectionProvider | UsersPermissionsUserConnectionConfirmed | UsersPermissionsUserConnectionBlocked | UsersPermissionsUserConnectionRole | UsersPermissionsUserConnectionOnboardingUser | UsersPermissionsUserConnectionOnboardingCreator | UsersPermissionsUserConnectionLang | CreateUserPayload | UpdateUserPayload | DeleteUserPayload | ComponentPassengerPassenger; + +export type Morph = Dependency | Info | UsersPermissionsMe | UsersPermissionsMeRole | UsersPermissionsLoginPayload | UserPermissionsPasswordPayload | Event | EventConnection | EventAggregator | EventGroupBy | EventConnectionId | EventConnectionCreated_At | EventConnectionUpdated_At | EventConnectionName | EventConnectionEmail | EventConnectionDate | EventConnectionAddress | EventConnectionPosition | EventConnectionUuid | EventConnectionDescription | EventConnectionNewsletter | CreateEventPayload | UpdateEventPayload | DeleteEventPayload | Page | PageConnection | PageAggregator | PageGroupBy | PageConnectionId | PageConnectionCreated_At | PageConnectionUpdated_At | PageConnectionName | PageConnectionContent | PageConnectionType | CreatePagePayload | UpdatePagePayload | DeletePagePayload | Passenger | PassengerConnection | PassengerAggregator | PassengerGroupBy | PassengerConnectionId | PassengerConnectionCreated_At | PassengerConnectionUpdated_At | PassengerConnectionName | PassengerConnectionEmail | PassengerConnectionLocation | PassengerConnectionUser | PassengerConnectionEvent | PassengerConnectionTravel | CreatePassengerPayload | UpdatePassengerPayload | DeletePassengerPayload | Settings | UpdateSettingPayload | DeleteSettingPayload | Travel | TravelConnection | TravelAggregator | TravelAggregatorSum | TravelAggregatorAvg | TravelAggregatorMin | TravelAggregatorMax | TravelGroupBy | TravelConnectionId | TravelConnectionCreated_At | TravelConnectionUpdated_At | TravelConnectionMeeting | TravelConnectionDeparture | TravelConnectionDetails | TravelConnectionEvent | TravelConnectionVehicleName | TravelConnectionSeats | TravelConnectionPhone_Number | CreateTravelPayload | UpdateTravelPayload | DeleteTravelPayload | Vehicle | VehicleConnection | VehicleAggregator | VehicleAggregatorSum | VehicleAggregatorAvg | VehicleAggregatorMin | VehicleAggregatorMax | VehicleGroupBy | VehicleConnectionId | VehicleConnectionCreated_At | VehicleConnectionUpdated_At | VehicleConnectionName | VehicleConnectionSeats | VehicleConnectionPhone_Number | VehicleConnectionUser | CreateVehiclePayload | UpdateVehiclePayload | DeleteVehiclePayload | EmailDesignerEmailTemplate | I18NLocale | UploadFile | UploadFileConnection | UploadFileAggregator | UploadFileAggregatorSum | UploadFileAggregatorAvg | UploadFileAggregatorMin | UploadFileAggregatorMax | UploadFileGroupBy | UploadFileConnectionId | UploadFileConnectionCreated_At | UploadFileConnectionUpdated_At | UploadFileConnectionName | UploadFileConnectionAlternativeText | UploadFileConnectionCaption | UploadFileConnectionWidth | UploadFileConnectionHeight | UploadFileConnectionFormats | UploadFileConnectionHash | UploadFileConnectionExt | UploadFileConnectionMime | UploadFileConnectionSize | UploadFileConnectionUrl | UploadFileConnectionPreviewUrl | UploadFileConnectionProvider | UploadFileConnectionProvider_Metadata | DeleteFilePayload | UsersPermissionsPermission | UsersPermissionsRole | UsersPermissionsRoleConnection | UsersPermissionsRoleAggregator | UsersPermissionsRoleGroupBy | UsersPermissionsRoleConnectionId | UsersPermissionsRoleConnectionName | UsersPermissionsRoleConnectionDescription | UsersPermissionsRoleConnectionType | CreateRolePayload | UpdateRolePayload | DeleteRolePayload | UsersPermissionsUser | UsersPermissionsUserConnection | UsersPermissionsUserAggregator | UsersPermissionsUserGroupBy | UsersPermissionsUserConnectionId | UsersPermissionsUserConnectionCreated_At | UsersPermissionsUserConnectionUpdated_At | UsersPermissionsUserConnectionUsername | UsersPermissionsUserConnectionFirstName | UsersPermissionsUserConnectionLastName | UsersPermissionsUserConnectionEmail | UsersPermissionsUserConnectionProvider | UsersPermissionsUserConnectionConfirmed | UsersPermissionsUserConnectionBlocked | UsersPermissionsUserConnectionRole | UsersPermissionsUserConnectionOnboardingUser | UsersPermissionsUserConnectionOnboardingCreator | UsersPermissionsUserConnectionLang | CreateUserPayload | UpdateUserPayload | DeleteUserPayload | ComponentPassengerPassenger; export type Mutation = { __typename?: 'Mutation';

@@ -329,6 +353,7 @@ /** Update an existing user */

updateUser?: Maybe<UpdateUserPayload>; /** Delete an existing user */ deleteUser?: Maybe<DeleteUserPayload>; + createSettingLocalization: Settings; upload: UploadFile; multipleUpload: Array<Maybe<UploadFile>>; updateFileInfo: UploadFile;

@@ -389,6 +414,12 @@

export type MutationUpdateSettingArgs = { input?: Maybe<UpdateSettingInput>; + locale?: Maybe<Scalars['String']>; +}; + + +export type MutationDeleteSettingArgs = { + locale?: Maybe<Scalars['String']>; };

@@ -457,6 +488,11 @@ input?: Maybe<DeleteUserInput>;

}; +export type MutationCreateSettingLocalizationArgs = { + input: UpdateSettingInput; +}; + + export type MutationUploadArgs = { refId?: Maybe<Scalars['ID']>; ref?: Maybe<Scalars['String']>;

@@ -808,6 +844,7 @@

export type QuerySettingArgs = { publicationState?: Maybe<PublicationState>; + locale?: Maybe<Scalars['String']>; };

@@ -939,6 +976,8 @@ gtm_id?: Maybe<Scalars['String']>;

about_link?: Maybe<Scalars['String']>; announcement?: Maybe<Scalars['String']>; faq_link?: Maybe<Scalars['String']>; + localizations?: Maybe<Array<Maybe<Scalars['ID']>>>; + locale?: Maybe<Scalars['String']>; created_by?: Maybe<Scalars['ID']>; updated_by?: Maybe<Scalars['ID']>; };

@@ -952,6 +991,16 @@ gtm_id?: Maybe<Scalars['String']>;

about_link?: Maybe<Scalars['String']>; announcement?: Maybe<Scalars['String']>; faq_link?: Maybe<Scalars['String']>; + locale?: Maybe<Scalars['String']>; + localizations?: Maybe<Array<Maybe<Settings>>>; +}; + + +export type SettingsLocalizationsArgs = { + sort?: Maybe<Scalars['String']>; + limit?: Maybe<Scalars['Int']>; + start?: Maybe<Scalars['Int']>; + where?: Maybe<Scalars['JSON']>; };

@@ -1896,6 +1945,7 @@ waitingList?: Maybe<Array<Maybe<EditComponentPassengerPassengerInput>>>;

travels?: Maybe<Array<Maybe<Scalars['ID']>>>; description?: Maybe<Scalars['String']>; waitingPassengers?: Maybe<Array<Maybe<Scalars['ID']>>>; + newsletter?: Maybe<Scalars['Boolean']>; created_by?: Maybe<Scalars['ID']>; updated_by?: Maybe<Scalars['ID']>; };

@@ -1920,6 +1970,13 @@ created_by?: Maybe<Scalars['ID']>;

updated_by?: Maybe<Scalars['ID']>; }; +export type EditLocaleInput = { + name?: Maybe<Scalars['String']>; + code?: Maybe<Scalars['String']>; + created_by?: Maybe<Scalars['ID']>; + updated_by?: Maybe<Scalars['ID']>; +}; + export type EditPageInput = { name?: Maybe<Scalars['String']>; content?: Maybe<Scalars['String']>;

@@ -1954,6 +2011,8 @@ gtm_id?: Maybe<Scalars['String']>;

about_link?: Maybe<Scalars['String']>; announcement?: Maybe<Scalars['String']>; faq_link?: Maybe<Scalars['String']>; + localizations?: Maybe<Array<Maybe<Scalars['ID']>>>; + locale?: Maybe<Scalars['String']>; created_by?: Maybe<Scalars['ID']>; updated_by?: Maybe<Scalars['ID']>; };

@@ -2293,7 +2352,9 @@ )> }

)> } ); -export type SettingQueryVariables = Exact<{ [key: string]: never; }>; +export type SettingQueryVariables = Exact<{ + locale: Scalars['String']; +}>; export type SettingQuery = (

@@ -2914,8 +2975,8 @@ export type DeletePassengerMutationHookResult = ReturnType<typeof useDeletePassengerMutation>;

export type DeletePassengerMutationResult = Apollo.MutationResult<DeletePassengerMutation>; export type DeletePassengerMutationOptions = Apollo.BaseMutationOptions<DeletePassengerMutation, DeletePassengerMutationVariables>; export const SettingDocument = gql` - query setting { - setting { + query setting($locale: String!) { + setting(locale: $locale) { id gtm_id about_link

@@ -2937,10 +2998,11 @@ *

* @example * const { data, loading, error } = useSettingQuery({ * variables: { + * locale: // value for 'locale' * }, * }); */ -export function useSettingQuery(baseOptions?: Apollo.QueryHookOptions<SettingQuery, SettingQueryVariables>) { +export function useSettingQuery(baseOptions: Apollo.QueryHookOptions<SettingQuery, SettingQueryVariables>) { return Apollo.useQuery<SettingQuery, SettingQueryVariables>(SettingDocument, baseOptions); } export function useSettingLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions<SettingQuery, SettingQueryVariables>) {
M frontend/graphql/setting.gqlfrontend/graphql/setting.gql

@@ -1,5 +1,5 @@

-query setting { - setting { +query setting ($locale: String!) { + setting (locale: $locale) { id gtm_id about_link
M frontend/hooks/useSettings.tsfrontend/hooks/useSettings.ts

@@ -1,16 +1,20 @@

import {useEffect} from 'react'; import {useSettingLazyQuery, SettingQuery} from '../generated/graphql'; +import useLangStore from '../stores/useLangStore'; const useSettings = () => { - const defaulData: SettingQuery = - {}; + const language = useLangStore(s => s.language); - const [fetchSettings, {data: {setting} = defaulData}] = - useSettingLazyQuery(); + const locale = {FR: 'fr', EN: 'en'}[language]; + + const defaulData: SettingQuery = {}; + const [fetchSettings, {data: {setting} = defaulData}] = useSettingLazyQuery({ + variables: {locale}, + }); useEffect(() => { fetchSettings(); - }, []); + }, [locale]); return setting; };