đ Fixes after PO review
jump to
@@ -34,23 +34,6 @@ },
"type": "decimal", "default": 0 }, - "caroster_plus_name": { - "pluginOptions": { - "i18n": { - "localized": true - } - }, - "type": "string", - "required": true - }, - "caroster_plus_description": { - "pluginOptions": { - "i18n": { - "localized": true - } - }, - "type": "richtext" - }, "caroster_plus_pricing_grid_id": { "pluginOptions": { "i18n": {
@@ -456,12 +456,6 @@ localized: true;
}; }; attributes: { - caroster_plus_description: Attribute.RichText & - Attribute.SetPluginOptions<{ - i18n: { - localized: true; - }; - }>; caroster_plus_enabled: Attribute.Boolean & Attribute.SetPluginOptions<{ i18n: {@@ -469,13 +463,6 @@ localized: false;
}; }> & Attribute.DefaultTo<false>; - caroster_plus_name: Attribute.String & - Attribute.Required & - Attribute.SetPluginOptions<{ - i18n: { - localized: true; - }; - }>; caroster_plus_price: Attribute.Decimal & Attribute.SetPluginOptions<{ i18n: {
@@ -151,6 +151,7 @@ name: Scalars['String'];
passengers?: Maybe<PassengerRelationResponseCollection>; travels?: Maybe<TravelRelationResponseCollection>; tripAlerts?: Maybe<TripAlertEntityResponseCollection>; + unpaid?: Maybe<Scalars['Boolean']>; updatedAt?: Maybe<Scalars['DateTime']>; uuid?: Maybe<Scalars['String']>; waitingPassengers?: Maybe<PassengerRelationResponseCollection>;@@ -203,6 +204,7 @@ not?: InputMaybe<EventFiltersInput>;
or?: InputMaybe<Array<InputMaybe<EventFiltersInput>>>; passengers?: InputMaybe<PassengerFiltersInput>; travels?: InputMaybe<TravelFiltersInput>; + unpaid?: InputMaybe<BooleanFilterInput>; updatedAt?: InputMaybe<DateTimeFilterInput>; users?: InputMaybe<UsersPermissionsUserFiltersInput>; uuid?: InputMaybe<StringFilterInput>;@@ -225,6 +227,7 @@ name?: InputMaybe<Scalars['String']>;
newsletter?: InputMaybe<Scalars['Boolean']>; passengers?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>; travels?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>; + unpaid?: InputMaybe<Scalars['Boolean']>; users?: InputMaybe<Array<InputMaybe<Scalars['ID']>>>; uuid?: InputMaybe<Scalars['String']>; };@@ -380,11 +383,10 @@ };
export type Module = { __typename?: 'Module'; - caroster_plus_description?: Maybe<Scalars['String']>; caroster_plus_enabled?: Maybe<Scalars['Boolean']>; - caroster_plus_name: Scalars['String']; - caroster_plus_payment_link: Scalars['String']; caroster_plus_price?: Maybe<Scalars['Float']>; + caroster_plus_pricing_grid_id: Scalars['String']; + caroster_plus_publishable_key: Scalars['String']; createdAt?: Maybe<Scalars['DateTime']>; locale?: Maybe<Scalars['String']>; localizations?: Maybe<ModuleRelationResponseCollection>;@@ -403,12 +405,10 @@ data?: Maybe<ModuleEntity>;
}; export type ModuleInput = { - caroster_plus_description?: InputMaybe<Scalars['String']>; caroster_plus_enabled?: InputMaybe<Scalars['Boolean']>; - caroster_plus_name?: InputMaybe<Scalars['String']>; - caroster_plus_payment_link?: InputMaybe<Scalars['String']>; - caroster_plus_payment_link_id?: InputMaybe<Scalars['String']>; caroster_plus_price?: InputMaybe<Scalars['Float']>; + caroster_plus_pricing_grid_id?: InputMaybe<Scalars['String']>; + caroster_plus_publishable_key?: InputMaybe<Scalars['String']>; }; export type ModuleRelationResponseCollection = {@@ -463,6 +463,7 @@ register: UsersPermissionsLoginPayload;
removeFile?: Maybe<UploadFileEntityResponse>; /** Reset user password. Confirm with a code (resetToken from forgotPassword) */ resetPassword?: Maybe<UsersPermissionsLoginPayload>; + sendMagicLink?: Maybe<Scalars['Boolean']>; setTripAlert?: Maybe<TripAlertEntityResponse>; updateEvent?: Maybe<EventEntityResponse>; /** Update an event using its UUID */@@ -535,6 +536,7 @@ };
export type MutationCreateTravelArgs = { + createVehicle?: InputMaybe<Scalars['Boolean']>; data: TravelInput; };@@ -672,6 +674,12 @@ export type MutationResetPasswordArgs = {
code: Scalars['String']; password: Scalars['String']; passwordConfirmation: Scalars['String']; +}; + + +export type MutationSendMagicLinkArgs = { + email: Scalars['String']; + lang?: InputMaybe<Scalars['String']>; };@@ -1773,14 +1781,6 @@ __typename?: 'UsersPermissionsUserRelationResponseCollection';
data: Array<UsersPermissionsUserEntity>; }; -export const MeFieldsFragmentDoc = gql` - fragment MeFields on UsersPermissionsMe { - id - username - email - confirmed -} - `; export const EventFieldsFragmentDoc = gql` fragment EventFields on EventEntity { id@@ -1943,7 +1943,7 @@ onboardingCreator
newsletterConsent notificationEnabled provider - events(pagination: {limit: 500}) { + events(pagination: {limit: 500}, filters: {isReturnEvent: {not: {eq: true}}}) { data { id attributes {@@ -2008,37 +2008,11 @@ }
} } `; -export const RegisterDocument = gql` - mutation register($user: UsersPermissionsRegisterInput!) { - register(input: $user) { - jwt - user { - ...MeFields - } - } -} - ${MeFieldsFragmentDoc}`; -export const ForgotPasswordDocument = gql` - mutation forgotPassword($email: String!) { - forgotPassword(email: $email) { - ok - } +export const SendMagicLinkDocument = gql` + mutation sendMagicLink($email: String!, $lang: String) { + sendMagicLink(email: $email, lang: $lang) } `; -export const ResetPasswordDocument = gql` - mutation resetPassword($password: String!, $passwordConfirmation: String!, $code: String!) { - resetPassword( - password: $password - passwordConfirmation: $passwordConfirmation - code: $code - ) { - jwt - user { - ...MeFields - } - } -} - ${MeFieldsFragmentDoc}`; export const CreateEventDocument = gql` mutation createEvent($eventData: EventInput!) { createEvent(data: $eventData) {@@ -2142,11 +2116,10 @@ query module($locale: I18NLocaleCode!) {
module(locale: $locale) { data { attributes { - caroster_plus_name caroster_plus_price caroster_plus_enabled - caroster_plus_description - caroster_plus_payment_link + caroster_plus_pricing_grid_id + caroster_plus_publishable_key } } }@@ -2302,14 +2275,8 @@ },
SetTripAlert(variables: SetTripAlertMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise<SetTripAlertMutation> { return withWrapper((wrappedRequestHeaders) => client.request<SetTripAlertMutation>(SetTripAlertDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'SetTripAlert', 'mutation'); }, - register(variables: RegisterMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise<RegisterMutation> { - return withWrapper((wrappedRequestHeaders) => client.request<RegisterMutation>(RegisterDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'register', 'mutation'); - }, - forgotPassword(variables: ForgotPasswordMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise<ForgotPasswordMutation> { - return withWrapper((wrappedRequestHeaders) => client.request<ForgotPasswordMutation>(ForgotPasswordDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'forgotPassword', 'mutation'); - }, - resetPassword(variables: ResetPasswordMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise<ResetPasswordMutation> { - return withWrapper((wrappedRequestHeaders) => client.request<ResetPasswordMutation>(ResetPasswordDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'resetPassword', 'mutation'); + sendMagicLink(variables: SendMagicLinkMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise<SendMagicLinkMutation> { + return withWrapper((wrappedRequestHeaders) => client.request<SendMagicLinkMutation>(SendMagicLinkDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'sendMagicLink', 'mutation'); }, createEvent(variables: CreateEventMutationVariables, requestHeaders?: Dom.RequestInit["headers"]): Promise<CreateEventMutation> { return withWrapper((wrappedRequestHeaders) => client.request<CreateEventMutation>(CreateEventDocument, variables, {...requestHeaders, ...wrappedRequestHeaders}), 'createEvent', 'mutation');@@ -2395,30 +2362,13 @@
export type SetTripAlertMutation = { __typename?: 'Mutation', setTripAlert?: { __typename?: 'TripAlertEntityResponse', data?: { __typename?: 'TripAlertEntity', id?: string | null, attributes?: { __typename?: 'TripAlert', latitude?: number | null, longitude?: number | null, address?: string | null, enabled?: boolean | null } | null } | null } | null }; -export type MeFieldsFragment = { __typename?: 'UsersPermissionsMe', id: string, username: string, email?: string | null, confirmed?: boolean | null }; - -export type RegisterMutationVariables = Exact<{ - user: UsersPermissionsRegisterInput; -}>; - - -export type RegisterMutation = { __typename?: 'Mutation', register: { __typename?: 'UsersPermissionsLoginPayload', jwt?: string | null, user: { __typename?: 'UsersPermissionsMe', id: string, username: string, email?: string | null, confirmed?: boolean | null } } }; - -export type ForgotPasswordMutationVariables = Exact<{ +export type SendMagicLinkMutationVariables = Exact<{ email: Scalars['String']; + lang?: InputMaybe<Scalars['String']>; }>; -export type ForgotPasswordMutation = { __typename?: 'Mutation', forgotPassword?: { __typename?: 'UsersPermissionsPasswordPayload', ok: boolean } | null }; - -export type ResetPasswordMutationVariables = Exact<{ - password: Scalars['String']; - passwordConfirmation: Scalars['String']; - code: Scalars['String']; -}>; - - -export type ResetPasswordMutation = { __typename?: 'Mutation', resetPassword?: { __typename?: 'UsersPermissionsLoginPayload', jwt?: string | null, user: { __typename?: 'UsersPermissionsMe', id: string, username: string, email?: string | null, confirmed?: boolean | null } } | null }; +export type SendMagicLinkMutation = { __typename?: 'Mutation', sendMagicLink?: boolean | null }; export type EventFieldsFragment = { __typename?: 'EventEntity', id?: string | null, attributes?: { __typename?: 'Event', uuid?: string | null, name: string, description?: string | null, enabled_modules?: any | null, email: string, lang?: Enum_Event_Lang | null, administrators?: Array<string | null> | null, date?: any | null, address?: string | null, latitude?: number | null, longitude?: number | null, isReturnEvent?: boolean | null, waitingPassengers?: { __typename?: 'PassengerRelationResponseCollection', data: Array<{ __typename?: 'PassengerEntity', id?: string | null, attributes?: { __typename?: 'Passenger', name: string, email?: string | null, location?: string | null, user?: { __typename?: 'UsersPermissionsUserEntityResponse', data?: { __typename?: 'UsersPermissionsUserEntity', id?: string | null, attributes?: { __typename?: 'UsersPermissionsUser', firstName?: string | null, lastName?: string | null } | null } | null } | null } | null }> } | null, travels?: { __typename?: 'TravelRelationResponseCollection', data: Array<{ __typename?: 'TravelEntity', id?: string | null, attributes?: { __typename?: 'Travel', meeting?: string | null, meeting_latitude?: number | null, meeting_longitude?: number | null, departureDate?: any | null, departureTime?: string | null, details?: string | null, vehicleName?: string | null, firstname?: string | null, lastname?: string | null, phone_number?: string | null, phoneCountry?: string | null, seats?: number | null, user?: { __typename?: 'UsersPermissionsUserEntityResponse', data?: { __typename?: 'UsersPermissionsUserEntity', id?: string | null, attributes?: { __typename?: 'UsersPermissionsUser', firstName?: string | null, lastName?: string | null } | null } | null } | null, passengers?: { __typename?: 'PassengerRelationResponseCollection', data: Array<{ __typename?: 'PassengerEntity', id?: string | null, attributes?: { __typename?: 'Passenger', name: string, location?: string | null, email?: string | null, phone?: string | null, phoneCountry?: string | null, user?: { __typename?: 'UsersPermissionsUserEntityResponse', data?: { __typename?: 'UsersPermissionsUserEntity', id?: string | null, attributes?: { __typename?: 'UsersPermissionsUser', firstName?: string | null, lastName?: string | null } | null } | null } | null } | null }> } | null } | null }> } | null } | null };@@ -2472,7 +2422,7 @@ locale: Scalars['I18NLocaleCode'];
}>; -export type ModuleQuery = { __typename?: 'Query', module?: { __typename?: 'ModuleEntityResponse', data?: { __typename?: 'ModuleEntity', attributes?: { __typename?: 'Module', caroster_plus_name: string, caroster_plus_price?: number | null, caroster_plus_enabled?: boolean | null, caroster_plus_description?: string | null, caroster_plus_payment_link: string } | null } | null } | null }; +export type ModuleQuery = { __typename?: 'Query', module?: { __typename?: 'ModuleEntityResponse', data?: { __typename?: 'ModuleEntity', attributes?: { __typename?: 'Module', caroster_plus_price?: number | null, caroster_plus_enabled?: boolean | null, caroster_plus_pricing_grid_id: string, caroster_plus_publishable_key: string } | null } | null } | null }; export type UserNotificationsQueryVariables = Exact<{ maxItems?: InputMaybe<Scalars['Int']>;
@@ -77,7 +77,7 @@ InputProps={{
endAdornment: <InputAdornment position="end">km</InputAdornment>, }} variant="standard" - defaultValue={radius} + value={radius} disabled={disabled} onChange={handleRadiusChange} />
@@ -1,4 +1,4 @@
-import {useReducer} from 'react'; +import {useEffect, useReducer} from 'react'; import {Box, Container, Paper, Typography, useMediaQuery} from '@mui/material'; import {useTranslation} from 'next-i18next'; import theme from '../../theme';@@ -19,15 +19,19 @@ userPermissions: {canSetAlert},
} = usePermissions(); const {t} = useTranslation(); const isMobile = useMediaQuery(theme.breakpoints.down('md')); - const [switchChecked, handleToggle] = useReducer( - i => !i, - tripAlertEntity?.attributes.enabled || false - ); + const [switchChecked, handleToggle] = useReducer(i => !i, false); + + useEffect(() => { + if (tripAlertEntity?.attributes?.enabled && !switchChecked) handleToggle(); + else if (!tripAlertEntity?.attributes?.enabled && switchChecked) + handleToggle(); + }, [tripAlertEntity]); return ( <Container maxWidth="sm" sx={{mt: isMobile ? 15 : 11, mx: 0, px: isMobile ? 2 : 4}} + key={tripAlertEntity?.attributes.address} > {!canSetAlert() && ( <Box sx={{width: '480px', maxWidth: '100%', position: 'relative'}}>
@@ -30,7 +30,7 @@ <>
<Divider /> <ListItem sx={{flexDirection: 'column', p: 2}}> <Box display="flex" justifyContent="space-between" width={1}> - <Box> + <Box pr={2}> {travel.attributes.departureDate && ( <Typography variant="overline" color="GrayText"> {t('passenger.assign.departure')}
@@ -1,108 +0,0 @@
-import Box from '@mui/material/Box'; -import Button from '@mui/material/Button'; -import Card from '@mui/material/Card'; -import Typography from '@mui/material/Typography'; -import Chip from '@mui/material/Chip'; -import Divider from '@mui/material/Divider'; -import Tooltip from '@mui/material/Tooltip'; -import ListItem from '@mui/material/ListItem'; -import ListItemIcon from '@mui/material//ListItemIcon'; -import ListItemText from '@mui/material/ListItemText'; -import ChevronRightIcon from '@mui/icons-material/ChevronRight'; -import AccountCircleOutlinedIcon from '@mui/icons-material/AccountCircleOutlined'; -import {useTranslation} from 'next-i18next'; -import Markdown from '../../components/Markdown'; -import useLocale from '../../hooks/useLocale'; -import usePermissions from '../../hooks/usePermissions'; -import {Event as EventType, Module} from '../../generated/graphql'; - -interface Props { - event: EventType; - modulesSettings: Module; -} - -const CarosterPlusOption = ({event, modulesSettings}: Props) => { - const {t} = useTranslation(); - const { - userPermissions: {canEditEventOptions}, - } = usePermissions(); - const {locale} = useLocale(); - - const {caroster_plus_name, caroster_plus_description, caroster_plus_price} = - modulesSettings; - - return ( - <Card - sx={{ - position: 'relative', - maxWidth: '100%', - width: '480px', - }} - > - <Box - display="flex" - justifyContent="space-between" - width="100%" - p={2} - py={1} - > - <Typography variant="h4" pt={1}> - {caroster_plus_name} - </Typography> - <Box pt={1}> - <Tooltip - title={t( - canEditEventOptions() - ? 'options.plus.activationOK' - : 'options.plus.activationForbiden' - )} - > - <Box> - <Button - href={`/${locale}/e/${event.uuid}/prices`} - disabled={!canEditEventOptions()} - sx={{ - backgroundColor: 'primary.light', - color: 'primary.main', - fontWeight: 'bold', - borderRadius: 8, - pl: 2, - pr: 1, - }} - > - {caroster_plus_price} {caroster_plus_price && 'EUR'}{' '} - <ChevronRightIcon /> - </Button> - </Box> - </Tooltip> - </Box> - </Box> - <Box p={2}> - <Markdown - variant="caption" - sx={{ - '& ul': { - pl: 2, - }, - }} - > - {caroster_plus_description} - </Markdown> - </Box> - <Divider /> - <ListItem - sx={{p: 2}} - secondaryAction={ - <Chip label={t('options.plus.creator')} size="small" /> - } - > - <ListItemIcon> - <AccountCircleOutlinedIcon /> - </ListItemIcon> - <ListItemText primary={event.email} /> - </ListItem> - </Card> - ); -}; - -export default CarosterPlusOption;
@@ -88,7 +88,8 @@ {getFormatedPhoneNumber({phone, phoneCountry})}
</Link> ) : ( <Typography variant="body1"> - {t('passenger.informations.notSpecify')} + {t('passenger.informations.notSpecify')},{' '} + {t('passenger.informations.byAdmin')} </Typography> )} </Box>
@@ -4,11 +4,9 @@ import useProfile from '../../hooks/useProfile';
import moment from 'moment'; import useTravelsStore from '../../stores/useTravelsStore'; import {useMemo} from 'react'; -import {calculateHaversineDistance} from '../../lib/geography'; const useDisplayTravels = () => { const datesFilter = useTravelsStore(s => s.datesFilter); - const meetingFilter = useTravelsStore(s => s.meetingFilter); const {userId} = useProfile(); const event = useEventStore(s => s.event);@@ -26,26 +24,7 @@ return datesFilter.some(date => date.isSame(departureDate));
}); }, [event?.travels?.data, datesFilter, userId]); - const meetingFilteredTravels = useMemo(() => { - if (!meetingFilter.latitude || !meetingFilter.longitude) - return dateFileredTravels; - - return dateFileredTravels - .map(travel => ({ - ...travel, - distance: calculateHaversineDistance( - [meetingFilter.latitude, meetingFilter.longitude], - [ - travel.attributes.meeting_latitude, - travel.attributes.meeting_longitude, - ] - ), - })) - .sort((a, b) => a.distance - b.distance) - .slice(0, 3); - }, [dateFileredTravels, meetingFilter]); - - return {displayedTravels: meetingFilteredTravels}; + return {displayedTravels: dateFileredTravels}; }; const sortTravels =
@@ -5,6 +5,7 @@ DialogActions,
DialogContent, DialogTitle, List, + Typography, } from '@mui/material'; import {useTranslation} from 'next-i18next'; import useEventStore from '../../stores/useEventStore';@@ -26,6 +27,9 @@ return (
<Dialog open={open} onClose={onClose}> <DialogTitle>{t`passenger.assign.title`}</DialogTitle> <DialogContent sx={{p: 0}}> + {!travels?.length && ( + <Typography px={3}>{t`passenger.assign.no_travel.title`}</Typography> + )} <List disablePadding> {travels?.map(travel => ( <AvailableTravel
@@ -385,9 +385,7 @@ };
export type Module = { __typename?: 'Module'; - caroster_plus_description?: Maybe<Scalars['String']['output']>; caroster_plus_enabled?: Maybe<Scalars['Boolean']['output']>; - caroster_plus_name: Scalars['String']['output']; caroster_plus_price?: Maybe<Scalars['Float']['output']>; caroster_plus_pricing_grid_id: Scalars['String']['output']; caroster_plus_publishable_key: Scalars['String']['output'];@@ -409,9 +407,7 @@ data?: Maybe<ModuleEntity>;
}; export type ModuleInput = { - caroster_plus_description?: InputMaybe<Scalars['String']['input']>; caroster_plus_enabled?: InputMaybe<Scalars['Boolean']['input']>; - caroster_plus_name?: InputMaybe<Scalars['String']['input']>; caroster_plus_price?: InputMaybe<Scalars['Float']['input']>; caroster_plus_pricing_grid_id?: InputMaybe<Scalars['String']['input']>; caroster_plus_publishable_key?: InputMaybe<Scalars['String']['input']>;@@ -1866,7 +1862,7 @@ locale: Scalars['I18NLocaleCode']['input'];
}>; -export type ModuleQuery = { __typename?: 'Query', module?: { __typename?: 'ModuleEntityResponse', data?: { __typename?: 'ModuleEntity', attributes?: { __typename?: 'Module', caroster_plus_name: string, caroster_plus_price?: number | null, caroster_plus_enabled?: boolean | null, caroster_plus_description?: string | null, caroster_plus_pricing_grid_id: string, caroster_plus_publishable_key: string } | null } | null } | null }; +export type ModuleQuery = { __typename?: 'Query', module?: { __typename?: 'ModuleEntityResponse', data?: { __typename?: 'ModuleEntity', attributes?: { __typename?: 'Module', caroster_plus_price?: number | null, caroster_plus_enabled?: boolean | null, caroster_plus_pricing_grid_id: string, caroster_plus_publishable_key: string } | null } | null } | null }; export type UserNotificationsQueryVariables = Exact<{ maxItems?: InputMaybe<Scalars['Int']['input']>;@@ -2537,10 +2533,8 @@ query module($locale: I18NLocaleCode!) {
module(locale: $locale) { data { attributes { - caroster_plus_name caroster_plus_price caroster_plus_enabled - caroster_plus_description caroster_plus_pricing_grid_id caroster_plus_publishable_key }
@@ -2,10 +2,8 @@ query module($locale: I18NLocaleCode!) {
module(locale: $locale) { data { attributes { - caroster_plus_name caroster_plus_price caroster_plus_enabled - caroster_plus_description caroster_plus_pricing_grid_id caroster_plus_publishable_key }
@@ -67,7 +67,7 @@ return {
notFound: true, props: {...translations}, }; - } + } else if (extensionReturn?.redirect) return extensionReturn; } return {
@@ -119,6 +119,7 @@ "notification.type.NewTrip.content": "A new trip close to you is available.",
"notification.type.NewTripAlert.content": "A new trip close to you is available.", "notification.type.PassengerJoinTrip.content": "A new passenger wishes to contact you to travel with you.", "notification.type.AssignedByAdmin.content": "An administrator added you to a trip.", + "notification.type.EventCreated.content": "You have created a new event.", "notifications.content": "No notification", "notifications.markAllRead": "Mark all in read", "notifications.title": "Notifications",@@ -157,6 +158,7 @@ "passenger.informations.call.label": "Call",
"passenger.informations.email.label": "E-mail", "passenger.informations.name.label": "Name", "passenger.informations.notSpecify": "Not provided", + "passenger.informations.byAdmin": "placed by admin", "passenger.informations.phone.label": "Phone", "passenger.informations.surname.label": "Surname", "passenger.informations.title": "Contact us",
@@ -116,6 +116,7 @@ "notification.type.NewTrip.content": "Un nouveau trajet proche de chez vous est disponible.",
"notification.type.NewTripAlert.content": "Un nouveau trajet proche de chez vous est disponible.", "notification.type.PassengerJoinTrip.content": "Un passager souhaite prendre contact pour voyager avec vous.", "notification.type.AssignedByAdmin.content": "Un administrateur vous a assigné à un trajet.", + "notification.type.EventCreated.content": "Vous avez créé un nouvel événement.", "notifications.content": "Aucune notification", "notifications.markAllRead": "Tout marquer en lu", "notifications.title": "Notifications",@@ -153,6 +154,7 @@ "passenger.informations.call.label": "Appeler",
"passenger.informations.email.label": "E-mail", "passenger.informations.name.label": "Prénom", "passenger.informations.notSpecify": "Non précisé", + "passenger.informations.byAdmin": "placé par un admin", "passenger.informations.phone.label": "Téléphone", "passenger.informations.surname.label": "Nom", "passenger.informations.title": "Demande de contact",
@@ -296,6 +296,16 @@ </Typography>
)} </Box> )} + {!isEditing && !!event.email && ( + <Box pt={2} pr={1.5}> + <Typography variant="overline"> + {t('options.plus.creator')} + </Typography> + <Typography id="EventLang" sx={{pr: 3}}> + {event.email} + </Typography> + </Box> + )} {!isEditing && ( <ShareEvent title={`Caroster ${event.name}`}
@@ -4,6 +4,7 @@ import pageUtils from '../../../lib/pageUtils';
import EventLayout from '../../../layouts/Event'; import {EventByUuidDocument} from '../../../generated/graphql'; import {getLocaleForLang} from '../../../lib/getLocale'; +import {getSession} from 'next-auth/react'; interface Props { eventUUID: string;@@ -18,7 +19,17 @@ export const getServerSideProps = pageUtils.getServerSideProps(
async (context, apolloClient) => { const {uuid} = context.query; const {host = ''} = context.req.headers; + const session = await getSession(context); let event = null; + + const hasAcceptedTos = !!session?.profile?.tosAcceptationDate; + if (!hasAcceptedTos) + return { + redirect: { + destination: '/auth/confirm', + permanent: false, + }, + }; // Fetch event try {
@@ -5,20 +5,11 @@ import {PropsWithChildren} from 'react';
import pageUtils from '../../../lib/pageUtils'; import useEventStore from '../../../stores/useEventStore'; import EventLayout, {TabComponent} from '../../../layouts/Event'; -import { - EventByUuidDocument, - Module, - ModuleDocument, - Enum_Userspermissionsuser_Lang as SupportedLocales, -} from '../../../generated/graphql'; -import CarosterPlusOption from '../../../containers/CarosterPlusOption'; +import {EventByUuidDocument} from '../../../generated/graphql'; import CarosterPlusSettings from '../../../containers/CarosterPlusSettings'; -import {Typography} from '@mui/material'; -import {useTranslation} from 'next-i18next'; import {getLocaleForLang} from '../../../lib/getLocale'; interface Props { - modulesSettings?: Module; eventUUID: string; announcement?: string; }@@ -27,17 +18,12 @@ const Page = (props: PropsWithChildren<Props>) => {
return <EventLayout {...props} Tab={OptionsTab} />; }; -const OptionsTab: TabComponent<Props> = ({modulesSettings}) => { - const {t} = useTranslation(); +const OptionsTab: TabComponent<Props> = () => { const theme = useTheme(); const event = useEventStore(s => s.event); if (!event) return null; - const carosterPlusActivated = - modulesSettings?.caroster_plus_enabled && - event.enabled_modules?.includes('caroster-plus'); - return ( <Box position="relative"> <Container@@ -52,13 +38,7 @@ mt: 13,
}, }} > - {carosterPlusActivated && <CarosterPlusSettings event={event} />}{' '} - {modulesSettings?.caroster_plus_enabled && !carosterPlusActivated && ( - <CarosterPlusOption event={event} modulesSettings={modulesSettings} /> - )} - {!modulesSettings?.caroster_plus_enabled && ( - <Typography variant="overline">{t`options.no_module`}</Typography> - )} + <CarosterPlusSettings event={event} /> </Container> </Box> );@@ -69,7 +49,6 @@ async (context, apolloClient) => {
const {uuid} = context.query; const {host = ''} = context.req.headers; let event = null; - let modulesSettings = null; // Fetch event try {@@ -84,36 +63,16 @@ notFound: true,
}; } - // Fetch modules settings - try { - const {data} = await apolloClient.query({ - query: ModuleDocument, - variables: {locale: context.locale}, - }); - modulesSettings = data?.module?.data?.attributes || {}; + const carosterPlusActivated = + event?.attributes?.enabled_modules?.includes('caroster-plus'); - const {caroster_plus_description, caroster_plus_name} = modulesSettings; - - if ( - caroster_plus_description && - caroster_plus_name && - String(caroster_plus_description).length === 0 && - String(caroster_plus_name).length === 0 - ) { - console.warn( - 'Module settings are not set for locale: ', - context.locale, - ' fallback to English' - ); - const {data: enData} = await apolloClient.query({ - query: ModuleDocument, - variables: {locale: SupportedLocales['en']}, - }); - modulesSettings = enData?.module?.data?.attributes; - } - } catch (error) { - console.error(error); - } + if (!carosterPlusActivated) + return { + redirect: { + destination: `/e/${uuid}/prices`, + permanent: false, + }, + }; const description = await getLocaleForLang( event?.attributes?.lang,@@ -122,7 +81,6 @@ );
return { props: { - modulesSettings, eventUUID: uuid, metas: { title: event?.attributes?.name || '',
@@ -52,7 +52,7 @@ mt: 13,
}, }} > - <Box component={Paper} mb={4}> + <Box mb={4}> {/* @ts-ignore */} <stripe-pricing-table pricing-table-id={modulesSettings.caroster_plus_pricing_grid_id}