Add initial implementation of Map SDK and example app
- Create README for the main repository and example app - Implement example app with MapView and Marker components - Add package.json for example app with necessary scripts and dependencies - Create Map SDK package with TypeScript wrapper around react-native-maps - Define TypeScript configuration for the SDK
This commit is contained in:
11
README.md
Normal file
11
README.md
Normal file
@@ -0,0 +1,11 @@
|
||||
# Map SDK Monorepo
|
||||
|
||||
This repository contains a TypeScript wrapper package (`@lynkedup/map-sdk`) that builds on `react-native-maps`, plus an `example` React Native app demonstrating usage.
|
||||
|
||||
Quick commands:
|
||||
|
||||
- Install deps: `npm run bootstrap`
|
||||
- Build SDK: `npm run build`
|
||||
- Start example: `npm run start:example`
|
||||
|
||||
See package READMEs for platform-specific setup (iOS/Android) and usage notes.
|
||||
21
example/App.tsx
Normal file
21
example/App.tsx
Normal file
@@ -0,0 +1,21 @@
|
||||
import React from 'react';
|
||||
import { SafeAreaView, StyleSheet } from 'react-native';
|
||||
import { MapView, Marker } from '@lynkedup/map-sdk';
|
||||
|
||||
export default function App() {
|
||||
return (
|
||||
<SafeAreaView style={styles.container}>
|
||||
<MapView
|
||||
style={styles.map}
|
||||
initialRegion={{ latitude: 37.78825, longitude: -122.4324, latitudeDelta: 0.0922, longitudeDelta: 0.0421 }}
|
||||
>
|
||||
<Marker coordinate={{ latitude: 37.78825, longitude: -122.4324 }} />
|
||||
</MapView>
|
||||
</SafeAreaView>
|
||||
);
|
||||
}
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
container: { flex: 1 },
|
||||
map: { flex: 1 }
|
||||
});
|
||||
15
example/README.md
Normal file
15
example/README.md
Normal file
@@ -0,0 +1,15 @@
|
||||
# Example App
|
||||
|
||||
This example demonstrates usage of `@lynkedup/map-sdk`.
|
||||
|
||||
Setup:
|
||||
|
||||
1. From repo root run `npm run bootstrap` to install workspace packages.
|
||||
2. From `example` run `npm install` to install native deps.
|
||||
3. iOS: run `npx pod-install ios` and add your Google Maps API key if you use Google provider.
|
||||
4. Android: ensure Google Play services and API keys are set in `AndroidManifest.xml` if using Google maps.
|
||||
|
||||
Run:
|
||||
- `npm run ios` or `npm run android` from `example` folder.
|
||||
|
||||
See `react-native-maps` docs for platform-specific instructions: https://github.com/react-native-maps/react-native-maps
|
||||
16
example/package.json
Normal file
16
example/package.json
Normal file
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "example",
|
||||
"private": true,
|
||||
"version": "0.0.1",
|
||||
"scripts": {
|
||||
"start": "react-native start",
|
||||
"ios": "react-native run-ios",
|
||||
"android": "react-native run-android"
|
||||
},
|
||||
"dependencies": {
|
||||
"react": "18.2.0",
|
||||
"react-native": "0.71.0",
|
||||
"react-native-maps": "^1.3.2",
|
||||
"@lynkedup/map-sdk": "*"
|
||||
}
|
||||
}
|
||||
13
package.json
Normal file
13
package.json
Normal file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"name": "mapsdk-monorepo",
|
||||
"private": true,
|
||||
"workspaces": [
|
||||
"packages/*",
|
||||
"example"
|
||||
],
|
||||
"scripts": {
|
||||
"bootstrap": "npm install",
|
||||
"build": "npm run -w @lynkedup/map-sdk build",
|
||||
"start:example": "npm run -w example start"
|
||||
}
|
||||
}
|
||||
33
packages/map-sdk/README.md
Normal file
33
packages/map-sdk/README.md
Normal file
@@ -0,0 +1,33 @@
|
||||
# @lynkedup/map-sdk
|
||||
|
||||
A small TypeScript wrapper around `react-native-maps` to provide a consistent API and typed components.
|
||||
|
||||
## Usage
|
||||
|
||||
Install peer deps in your app:
|
||||
|
||||
```
|
||||
npm install react-native react-native-maps
|
||||
# and add this package via workspace or npm/yarn
|
||||
```
|
||||
|
||||
Basic usage:
|
||||
|
||||
```ts
|
||||
import React from 'react';
|
||||
import { MapView, Marker } from '@lynkedup/map-sdk';
|
||||
|
||||
export default function App() {
|
||||
return (
|
||||
<MapView
|
||||
style={{ flex: 1 }}
|
||||
initialRegion={{ latitude: 37.78825, longitude: -122.4324, latitudeDelta: 0.0922, longitudeDelta: 0.0421 }}
|
||||
>
|
||||
<Marker coordinate={{ latitude: 37.78825, longitude: -122.4324 }} />
|
||||
</MapView>
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
## Notes
|
||||
- This package delegates to `react-native-maps` for platform implementations. Follow `react-native-maps` docs for iOS/Android setup (Google Maps API key, pods, manifest permissions).
|
||||
25
packages/map-sdk/package.json
Normal file
25
packages/map-sdk/package.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"name": "@lynkedup/map-sdk",
|
||||
"version": "0.1.0",
|
||||
"main": "dist/index.js",
|
||||
"types": "dist/index.d.ts",
|
||||
"license": "MIT",
|
||||
"files": [
|
||||
"dist"
|
||||
],
|
||||
"scripts": {
|
||||
"build": "tsc -p tsconfig.json",
|
||||
"lint": "eslint . --ext .ts,.tsx"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"react": ">=17",
|
||||
"react-native": ">=0.70",
|
||||
"react-native-maps": "^1.3.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"typescript": "^5.0.0",
|
||||
"eslint": "^8.0.0",
|
||||
"@types/react": "^18.0.0",
|
||||
"@types/react-native": "^0.70.0"
|
||||
}
|
||||
}
|
||||
10
packages/map-sdk/src/MapView.tsx
Normal file
10
packages/map-sdk/src/MapView.tsx
Normal file
@@ -0,0 +1,10 @@
|
||||
import React from 'react';
|
||||
import RNMapView, { MapViewProps as RNMapViewProps } from 'react-native-maps';
|
||||
|
||||
export type MapProps = RNMapViewProps;
|
||||
|
||||
const MapView: React.FC<MapProps> = (props) => {
|
||||
return <RNMapView {...props}>{props.children}</RNMapView>;
|
||||
};
|
||||
|
||||
export default MapView;
|
||||
2
packages/map-sdk/src/index.ts
Normal file
2
packages/map-sdk/src/index.ts
Normal file
@@ -0,0 +1,2 @@
|
||||
export { default as MapView } from './MapView';
|
||||
export { Marker, Polyline, PROVIDER_GOOGLE } from 'react-native-maps';
|
||||
15
packages/map-sdk/tsconfig.json
Normal file
15
packages/map-sdk/tsconfig.json
Normal file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2019",
|
||||
"module": "CommonJS",
|
||||
"jsx": "react",
|
||||
"declaration": true,
|
||||
"outDir": "dist",
|
||||
"strict": true,
|
||||
"esModuleInterop": true,
|
||||
"skipLibCheck": true
|
||||
},
|
||||
"include": [
|
||||
"src/**/*"
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user