Skip to content

Commit

Permalink
Merge branch 'main' into deploy
Browse files Browse the repository at this point in the history
  • Loading branch information
davwheat committed Jan 10, 2024
2 parents a8cec1e + 8e31a5c commit b0c8a44
Show file tree
Hide file tree
Showing 11 changed files with 324 additions and 243 deletions.
8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,11 @@
"@material-ui/styles": "^4.11.5",
"@mdx-js/react": "^2.3.0",
"@reach/tabs": "^0.18.0",
"@sentry/gatsby": "^7.92.0",
"@sentry/gatsby": "^7.93.0",
"@slixites/gatsby-plugin-google-fonts": "^1.1.1",
"active-resource": "^1.0.0-beta.7",
"case-sensitive-paths-webpack-plugin": "^2.4.0",
"clsx": "^2.0.0",
"clsx": "^2.1.0",
"dayjs": "^1.11.10",
"file-saver": "^2.0.5",
"font-color-contrast": "^11.1.0",
Expand Down Expand Up @@ -54,7 +54,7 @@
"leaflet.markercluster": "^1.5.3",
"leaflet.sync": "^0.2.4",
"mdi-react": "^9.4.0",
"mobile-spectrum-data": "^1.17.0",
"mobile-spectrum-data": "^1.18.0",
"nanoid": "^4.0.2",
"prop-types": "^15.8.1",
"rbush": "^3.0.1",
Expand Down Expand Up @@ -96,7 +96,7 @@
"gatsby-plugin-webpack-bundle-analyser-v2": "^1.1.32",
"prettier": "^3.1.1",
"typescript": "^5.3.3",
"wrangler": "^3.22.3"
"wrangler": "^3.22.4"
},
"license": "MIT",
"scripts": {
Expand Down
37 changes: 24 additions & 13 deletions src/components/Maps/UkCoverageMap/Providers/3UKProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,12 @@ import CoverageProvider, { ICoverageLayer, ICoverageLayerKey } from './CoverageP
import ThreeLogo from '@assets/icons/brands/three.inline.svg'

export default class ThreeUkCoverageMapProvider extends CoverageProvider<true> {
protected _version: string = '2024-01-09'

providerName: string = 'Three UK'
defaultLayerId: number = this.getLayers().findIndex(layer => layer.label === '4G VoLTE')
defaultLayerIndex: number = this.getLayers().findIndex(layer => layer.label === '4G VoLTE')
supportsSites: boolean = false

readonly supportsVersionHistory = true
readonly maxZoom = 14

Expand All @@ -19,11 +22,10 @@ export default class ThreeUkCoverageMapProvider extends CoverageProvider<true> {
'2023-05-12': '12 May 2023',
'2023-07-12': '12 July 2023',
'2023-08-18': '18 August 2023',
'2024-01-09': '9 January 2024',
}

protected version: string = '2023-08-18'

protected getTileUrl(layer: string, version: string = this.version): string {
protected getTileUrl(layer: string, version: string = this._version): string {
return `https://234-20.coveragetiles.com/${version}/${layer}/{z}/{x}/{y}.png`
}

Expand All @@ -34,20 +36,24 @@ export default class ThreeUkCoverageMapProvider extends CoverageProvider<true> {
}
}

getLayerKeys(): ICoverageLayerKey[] {
protected _getLayerKeys(version: string): ICoverageLayerKey[] {
return [
{
key: [
{ color: '#dc350e', label: 'Good outdoors and indoors' },
{ color: '#db350e96', label: 'Good outdoors' },
],
},
{
key: [
{ color: '#dc350e', label: 'Good outdoors and indoors' },
{ color: '#db350e96', label: 'Good outdoors' },
],
},
...(version < '2024-01-01'
? [
{
key: [
{ color: '#dc350e', label: 'Good outdoors and indoors' },
{ color: '#db350e96', label: 'Good outdoors' },
],
},
]
: []),
{
key: [
{ color: '#dc350e', label: 'Good outdoors and indoors' },
Expand All @@ -64,10 +70,15 @@ export default class ThreeUkCoverageMapProvider extends CoverageProvider<true> {
}

getPageMessages(): string[] {
return []
return ['Since 2024, Three have removed their 4G non-VoLTE coverage layer. This layer will only be accessible on map versions before 2024.']
}

getLayers(): ICoverageLayer[] {
protected _getLayers(version: string): ICoverageLayer[] {
// No VoLTE layer since this version
if (version >= '2024-01-09') {
return [this.getTileLayerEntry('3G', '3g'), this.getTileLayerEntry('4G VoLTE', '4g'), this.getTileLayerEntry('5G', '5g')]
}

return [
this.getTileLayerEntry('3G', '3g'),
this.getTileLayerEntry('4G', '4g'),
Expand Down
42 changes: 33 additions & 9 deletions src/components/Maps/UkCoverageMap/Providers/CoverageProvider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,22 +17,26 @@ export interface ICoverageLayerKey {

export default abstract class CoverageProvider<VersionHistorySupported extends boolean = false> {
abstract providerName: string
abstract defaultLayerId: number
abstract defaultLayerIndex: number
abstract supportsSites: boolean
abstract readonly supportsVersionHistory: VersionHistorySupported
readonly maxZoom: number = 15

abstract getLayers(): ICoverageLayer[]
abstract getLayerKeys(): ICoverageLayerKey[]
protected abstract _getLayers(version: VersionHistorySupported extends true ? string : undefined): ICoverageLayer[]
protected abstract _getLayerKeys(version: VersionHistorySupported extends true ? string : undefined): ICoverageLayerKey[]
abstract getPageMessages(): string[]

abstract readonly providerIcon: React.ReactNode

protected abstract version: VersionHistorySupported extends true ? string : undefined
protected abstract _version: VersionHistorySupported extends true ? string : undefined
protected abstract readonly allVersions: VersionHistorySupported extends true ? Record<string, string> : undefined

get version() {
return this._version
}

public getCurrentVersion(): string {
return this.version!
return this._version!
}

public getTilesVersions(): Record<string, string> {
Expand All @@ -48,18 +52,30 @@ export default abstract class CoverageProvider<VersionHistorySupported extends b
return false
}

;(this.version as string) = version
;(this._version as string) = version
return true
}

validate() {
if (this.getLayers().length !== this.getLayerKeys().length) {
throw new Error('Number of layers and layer keys must match')
if (this.supportsVersionHistory) {
return Object.keys(this.getTilesVersions()).every(version => {
// @ts-expect-error
if (this._getLayers(version).length !== this._getLayerKeys(version).length) {
throw new Error(`Number of layers and layer keys do not match for version ${version}`)
}
})
} else {
// @ts-expect-error
if (this._getLayers(undefined).length !== this._getLayerKeys(undefined).length) {
throw new Error(`Number of layers and layer keys do not match`)
}

return true
}
}

isLayerHidden(layerId: number, forceHideHidden: boolean = false): boolean {
if (!!this.getLayers()[layerId].hidden) {
if (!!this._getLayers(this._version)[layerId].hidden) {
// Hidden
if (forceHideHidden) return true

Expand All @@ -76,4 +92,12 @@ export default abstract class CoverageProvider<VersionHistorySupported extends b
attributionTemplate(layerLabel: string): string {
return ${layerLabel} coverage info from ${this.providerName}`
}

getLayers(): ICoverageLayer[] {
return this._getLayers(this._version)
}

getLayerKeys(): ICoverageLayerKey[] {
return this._getLayerKeys(this._version)
}
}
5 changes: 5 additions & 0 deletions src/components/Maps/UkCoverageMap/Providers/EEProvider.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
.ee_5g_2100,
.ee_5g_3400 {
/* Improve visibility of the 5G 2100MHz layer */
filter: hue-rotate(285deg) saturate(2) brightness(0.8);
}
65 changes: 49 additions & 16 deletions src/components/Maps/UkCoverageMap/Providers/EEProvider.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@ import { TileLayer } from 'react-leaflet'
import CoverageProvider, { ICoverageLayer, ICoverageLayerKey } from './CoverageProvider'
import EELogo from '@assets/icons/brands/ee.inline.svg'

import './EEProvider.css'

export default class EECoverageMapProvider extends CoverageProvider<true> {
providerName: string = 'EE'
defaultLayerId: number = this.getLayers().findIndex(layer => layer.label === '4G (all bands)')
defaultLayerIndex: number = this.getLayers().findIndex(layer => layer.label === '4G (all bands)')
supportsSites: boolean = false
readonly supportsVersionHistory = true
readonly maxZoom = 14
Expand All @@ -17,10 +19,11 @@ export default class EECoverageMapProvider extends CoverageProvider<true> {
'2023-07-25': '25 July 2023',
'2023-09-30': '30 September 2023',
'2023-11-28': '28 November 2023',
'2024-01-09': '9 January 2024',
}
protected version = '2023-11-28'
protected _version = '2024-01-09'

getLayers(): ICoverageLayer[] {
_getLayers(version: string): ICoverageLayer[] {
return [
{
label: '2G',
Expand Down Expand Up @@ -81,13 +84,33 @@ export default class EECoverageMapProvider extends CoverageProvider<true> {
{
label: '5G (n78 only)',
hidden: true,
url: this.makeLayerUri('5g_3400'),
},
{
label: '5G (n1 only) [DEAD]',
hidden: true,
url: this.makeLayerUri('5g_2100'),
layers: (
<TileLayer
key={this.makeLayerUri('5g_3400')}
opacity={0.6}
url={this.makeLayerUri('5g_3400')}
attribution={this.attributionTemplate('5G (n78 only)')}
className="ee_5g_3400"
/>
),
},
...(version >= '2023-11-28'
? ([
{
label: '5G (n1 only)',
hidden: true,
layers: (
<TileLayer
key={this.makeLayerUri('5g_2100')}
opacity={0.6}
url={this.makeLayerUri('5g_2100')}
attribution={this.attributionTemplate('5G (2100 MHz only)')}
className="ee_5g_2100"
/>
),
},
] as ICoverageLayer[])
: []),
{
label: '5G (all)',
url: this.makeLayerUri('5g'),
Expand All @@ -96,10 +119,10 @@ export default class EECoverageMapProvider extends CoverageProvider<true> {
}

private makeLayerUri(layerName: string): string {
return `https://234-30.coveragetiles.com/${this.version}/${layerName}/{z}/{x}/{y}.png`
return `https://234-30.coveragetiles.com/${this._version}/${layerName}/{z}/{x}/{y}.png`
}

getLayerKeys(): ICoverageLayerKey[] {
_getLayerKeys(version: string): ICoverageLayerKey[] {
return [
{
key: [...this.layerKey('2g')],
Expand Down Expand Up @@ -129,18 +152,22 @@ export default class EECoverageMapProvider extends CoverageProvider<true> {
key: [...this.layerKey('4g'), ...this.layerKey('5g')],
},
{
key: [...this.layerKey('5g')],
},
{
key: [...this.layerKey('5g')],
key: [...this.layerKey('5g_modified')],
},
...(version >= '2023-11-28'
? [
{
key: [...this.layerKey('5g_modified')],
},
]
: []),
{
key: [...this.layerKey('4g'), ...this.layerKey('5g')],
},
]
}

private layerKey(type: '2g' | '3g' | '4g' | '5g' | 'lteca') {
private layerKey(type: '2g' | '3g' | '4g' | '5g' | 'lteca' | '5g_modified') {
switch (type) {
case '2g':
return [
Expand All @@ -167,6 +194,12 @@ export default class EECoverageMapProvider extends CoverageProvider<true> {
{ color: '#fef7ba', label: '5G outdoors' },
]

case '5g_modified':
return [
{ color: '#cc69ac', label: '5G outdoors and indoors' },
{ color: '#ccb0c3', label: '5G outdoors' },
]

case 'lteca':
return [{ color: '#f3666b', label: 'LTE CA available' }]
}
Expand Down
Loading

0 comments on commit b0c8a44

Please sign in to comment.