2021-07-01 00:49:05 +02:00
import { NextSeo } from 'next-seo' ;
2021-07-02 20:55:26 +02:00
import { useTranslation } from 'next-i18next' ;
import { serverSideTranslations } from 'next-i18next/serverSideTranslations' ;
2021-07-01 00:49:05 +02:00
2021-07-02 20:55:26 +02:00
import Form from '../components/Form' ;
import Card from '../components/Card' ;
import Page from '../components/Page' ;
2021-09-23 22:49:49 +02:00
import Alert from '../components/Alert' ;
2021-09-28 09:09:42 +02:00
import React , { useEffect , useState } from 'react' ;
2021-10-15 16:47:32 +02:00
import { isIOS , isSafari } from 'react-device-detect' ;
2021-09-27 22:05:33 +02:00
import usePassCount from "../src/hooks/use_pass_count" ;
2021-09-28 09:09:42 +02:00
import Link from 'next/link'
2021-07-01 00:49:05 +02:00
function Index ( ) : JSX . Element {
2021-07-02 20:55:26 +02:00
const { t } = useTranslation ( [ 'common' , 'index' , 'errors' ] ) ;
2021-09-27 22:05:33 +02:00
const passCount = usePassCount ( ) ;
const displayPassCount = ( passCount ? ` ${ passCount } receipts have been processed successfully to date! ` : '' ) ;
2021-07-09 03:22:14 +02:00
2021-09-25 07:15:35 +02:00
const [ warningMessages , _setWarningMessages ] = useState < Array < string > > ( [ ] ) ;
2021-09-25 01:07:00 +02:00
const setWarningMessage = ( message : string ) = > {
if ( ! message ) return ;
const translation = t ( 'errors:' . concat ( message ) ) ;
_setWarningMessages ( Array . from ( new Set ( [ . . . warningMessages , translation !== message ? translation : message ] ) ) ) ;
} ;
const deleteWarningMessage = ( message : string ) = > _setWarningMessages ( warningMessages . filter ( item = > item !== message ) ) ;
2021-09-28 09:02:16 +02:00
useEffect ( ( ) = > {
if ( isIOS && ! isSafari ) setWarningMessage ( "iPhone users, only Safari is supported at the moment. Please switch to Safari to prevent any unexpected errors." )
else if ( ! isIOS ) {
setWarningMessage ( 'Only Safari on iOS is officially supported for Apple Wallet import at the moment - ' +
2021-10-15 16:47:32 +02:00
'for other platforms, please create a photo card or ensure you have an application which can open Apple Wallet .pkpass files' ) ;
2021-09-28 09:02:16 +02:00
}
2021-09-29 15:33:10 +02:00
} , [ ] ) ;
2021-09-25 01:07:00 +02:00
2021-10-16 04:32:38 +02:00
const title = 'Grassroots - vaccination QR Code import for Apple and Android devices. Supports BC AB SK MB ON QC NS YK NT NY NJ CA LA VA HI UT' ;
const description = 'Grassroots imports vaccination QR codes and stores them on Apple and Android devices in a convenient, secure, and privacy-respecting way. Supports SHC QR codes from BC AB SK MB ON QC NS YK NT NY NJ CA LA VA HI UT' ;
2021-07-02 20:55:26 +02:00
2021-07-01 00:49:05 +02:00
return (
< >
< NextSeo
2021-07-09 03:22:14 +02:00
title = { title }
2021-07-09 03:19:04 +02:00
description = { description }
2021-07-01 00:49:05 +02:00
openGraph = { {
2021-08-27 18:36:27 +02:00
url : 'https://grassroots.vaccine-ontario.ca/' ,
2021-07-09 03:22:14 +02:00
title : title ,
2021-07-09 03:19:04 +02:00
description : description ,
2021-10-15 16:47:32 +02:00
images : [
{
url : 'https://grassroots.vaccine-ontario.ca/grassroots.jpg' ,
width : 400 ,
height : 400 ,
alt : description ,
}
] ,
2021-07-09 03:22:14 +02:00
site_name : title ,
2021-07-01 00:49:05 +02:00
} }
twitter = { {
2021-09-09 23:08:49 +02:00
handle : '@grassroots_team' ,
site : '@grassroots_team' ,
2021-07-01 00:49:05 +02:00
cardType : 'summary_large_image' ,
} }
/ >
< Page content = {
< div className = "space-y-5" >
2021-09-25 01:07:00 +02:00
{ warningMessages . map ( ( message , i ) = >
2021-09-28 09:02:16 +02:00
< Alert message = { message } key = { 'error-' + i } type = "warning" onClose = { ( ) = > deleteWarningMessage ( message ) } / >
2021-09-25 01:07:00 +02:00
) }
2021-07-01 00:49:05 +02:00
< Card content = {
2021-09-25 01:08:18 +02:00
< div > < p > { t ( 'common:subtitle' ) } < / p > < br / > < p > { t ( 'common:subtitle2' ) } < / p > < br / >
2021-09-27 22:05:33 +02:00
< b > { displayPassCount } < / b > < br / > < br / >
2021-10-16 04:32:38 +02:00
< b > MAJOR NEW RELEASE ! < / b > Oct 15 evening update :
2021-09-25 01:08:18 +02:00
< br / >
< br / >
< ul className = "list-decimal list-outside" style = { { marginLeft : '20px' } } >
2021-10-15 16:47:32 +02:00
< li > You can now import the new enhanced receipt from Ontario onto your Apple or Android devices < / li >
< li > Support released for importing Ontario , British Columbia , Alberta , Saskatchewan , Nova Scotia , Québec , Yukon , California , New York , and Louisiana SHC QR codes < / li >
< li > Support released for importing QR codes from images as well as from PDFs < / li >
< li > Support for creating our previous interim QR codes has been removed - now that the official Ontario QR code is being released and the gap is filled , our QR codes are no longer needed < / li >
2021-10-16 04:32:38 +02:00
< li > Support released for importing Manitoba ' s ( new unannounced ) QR codes , as well as for Northwest Territories , New Jersey , Hawaii , Virginia , and Utah SHC QR codes < / li >
2021-09-25 01:08:18 +02:00
< / ul > < br / >
2021-09-27 22:05:33 +02:00
< p > { t ( 'common:continueSpirit' ) } < / p >
2021-09-28 09:09:42 +02:00
< br / >
< Link href = "https://www.youtube.com/watch?v=AIrG5Qbjptg" >
< a className = "underline" target = "_blank" >
Click here for a video demo
< / a >
< / Link > & nbsp ;
2021-09-27 22:05:33 +02:00
< / div >
2021-07-01 00:49:05 +02:00
} / >
< Form / >
< / div >
} / >
< / >
)
}
2021-09-19 18:21:59 +02:00
2021-07-03 11:59:59 +02:00
export async function getStaticProps ( { locale } ) {
2021-07-02 20:55:26 +02:00
return {
props : {
. . . ( await serverSideTranslations ( locale , [ 'common' , 'index' , 'errors' ] ) ) ,
} ,
} ;
}
2021-07-01 00:49:05 +02:00
export default Index ;