Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Example: Layers #65

Draft
wants to merge 12 commits into
base: master
Choose a base branch
from
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions map-sdk/example-template/.eslintrc.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/** @type import('eslint').Linter.Config */
module.exports = {
root: true,
env: {browser: true, es2020: true},
extends: [
'eslint:recommended',
'plugin:@typescript-eslint/recommended',
'plugin:react-hooks/recommended'
],
ignorePatterns: ['dist', '.eslintrc.cjs'],
parser: '@typescript-eslint/parser',
plugins: ['react-refresh'],
rules: {
'react-refresh/only-export-components': ['warn', {allowConstantExport: true}]
}
};
24 changes: 24 additions & 0 deletions map-sdk/example-template/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.

# dependencies
/node_modules
/.pnp
.pnp.js

# testing
/coverage

# production
/build

# misc
.DS_Store
.env.local
.env.development.local
.env.test.local
.env.production.local

npm-debug.log*
yarn-debug.log*
yarn-error.log*
.yarn
1 change: 1 addition & 0 deletions map-sdk/example-template/.yarnrc.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
nodeLinker: node-modules
33 changes: 33 additions & 0 deletions map-sdk/example-template/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Map SDK example template

This is an example template for Foursquare's [Map SDK](https://location.foursquare.com/developer/docs/studio-map-sdk-introduction) that allows you to programmatically render [Foursquare Studio](https://studio.foursquare.com/) maps within your website and with your own data.

The project was bootstrapped with [Vite](https://vitejs.dev/guide/).

## Available Scripts

In the project directory, you can run:

### `yarn dev`

Runs the app in the development mode.\
By default, the app is available at [http://localhost:5173](http://localhost:5173/) in your browser.

The page will reload when you make edits.\
You will also see any lint errors in the console.

### `yarn build`

Builds and bundles the app for production into the `dist` folder.

### `yarn preview`

Runs a server to locally preview the production build.

If you don't use `yarn dev`, you likely would want to use `yarn build` and `yarn preview` together.

## Learn More

You can learn more about [setting up a React app with Vite](https://react.dev/learn/add-react-to-an-existing-project) and on the official [Vite webiste](https://vitejs.dev/guide/).

To learn React, check out the [React documentation](https://react.dev/).
12 changes: 12 additions & 0 deletions map-sdk/example-template/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" href="/fsq-favicon.png" />
<title>Example Template</title>
</head>
<body>
<script type="module" src="/src/index.tsx"></script>
<div id="root"></div>
</body>
</html>
30 changes: 30 additions & 0 deletions map-sdk/example-template/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
{
"name": "example-template",
"version": "0.0.0",
"private": true,
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0",
"preview": "vite preview"
},
"dependencies": {
"@unfolded/map-sdk": "^1.9.1",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
"devDependencies": {
"@types/eslint": "^8.44.2",
"@types/react": "^18.2.18",
"@types/react-dom": "^18.2.7",
"@typescript-eslint/eslint-plugin": "^6.2.1",
"@typescript-eslint/parser": "^6.2.1",
"@vitejs/plugin-react": "^4.0.4",
"eslint": "^8.46.0",
"eslint-plugin-react-hooks": "^4.6.0",
"eslint-plugin-react-refresh": "^0.4.3",
"typescript": "^5.2.2",
"vite": "^4.4.9"
}
}
Binary file added map-sdk/example-template/public/fsq-favicon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
93 changes: 93 additions & 0 deletions map-sdk/example-template/src/App.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,93 @@
import {FC, useCallback, useEffect, useRef, useState} from 'react';
import {createMap, MapApi} from '@unfolded/map-sdk';

export const App: FC = () => {
const containerRef = useRef<HTMLDivElement>(null);
const [map, setMap] = useState<MapApi | null>(null);

useEffect(() => {
const initMap = async () => {
const map = await createMap({
container: containerRef.current!
});

setMap(map);

// here you add map.thing()
};

initMap();
}, []);

return <div id="map-container" ref={containerRef}></div>;
};

export const AppWithCustomUI: FC = () => {
const containerRef = useRef<HTMLDivElement>(null);
const [map, setMap] = useState<MapApi | null>(null);

useEffect(() => {
const initMap = async () => {
const map = await createMap({
container: containerRef.current!
});

setMap(map);
};

initMap();
}, []);

const logLayers = useCallback(() => {
if (!map) {
return;
}

const layers = map.getLayers();
console.log(layers);
}, [map]);

const addSampleLayer = useCallback(() => {
if (!map) {
return;
}

const sampleDataset = {
id: 'my-sample-dataset',
label: 'Sample Dataset',
data: [
{latitude: 44.8125, longitude: 20.4612}, // Belgrade
{latitude: 37.7749, longitude: -122.4194}, // San Francisco
{latitude: 40.7128, longitude: -74.006} // New York
]
};

map.addDataset(sampleDataset, {
autoCreateLayers: true,
centerMap: true
});
}, [map]);

return (
<>
<div id="map-container" ref={containerRef}></div>
<div className="controls">
<button
onClick={() => {
logLayers();
}}
>
log layers
</button>

<button
onClick={() => {
addSampleLayer();
}}
>
add sample layer
</button>
</div>
</>
);
};
21 changes: 21 additions & 0 deletions map-sdk/example-template/src/index.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
body {
margin: 0;
padding: 0;
}

#map-container {
width: 100vw;
height: 100vh;
overflow: hidden;
}

.controls {
position: fixed;
right: 0;
bottom: 0;
margin: 20px;
display: flex;
gap: 5px;
flex-direction: column;
}

5 changes: 5 additions & 0 deletions map-sdk/example-template/src/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import {createRoot} from 'react-dom/client';
import './index.css';
import {App, AppWithCustomUI} from './App';

createRoot(document.getElementById('root')!).render(<AppWithCustomUI />);
25 changes: 25 additions & 0 deletions map-sdk/example-template/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"compilerOptions": {
"target": "ES2020",
"useDefineForClassFields": true,
"lib": ["ES2020", "DOM", "DOM.Iterable"],
"module": "ESNext",
"skipLibCheck": true,

/* Bundler mode */
"moduleResolution": "bundler",
"allowImportingTsExtensions": true,
"resolveJsonModule": true,
"isolatedModules": true,
"noEmit": true,
"jsx": "react-jsx",

/* Linting */
"strict": true,
"noUnusedLocals": true,
"noUnusedParameters": true,
"noFallthroughCasesInSwitch": true
},
"include": ["src"],
"references": [{ "path": "./tsconfig.node.json" }]
}
10 changes: 10 additions & 0 deletions map-sdk/example-template/tsconfig.node.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"compilerOptions": {
"composite": true,
"skipLibCheck": true,
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true
},
"include": ["vite.config.ts"]
}
7 changes: 7 additions & 0 deletions map-sdk/example-template/vite.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import {defineConfig} from 'vite';
import react from '@vitejs/plugin-react';

// https://vitejs.dev/config/
export default defineConfig({
plugins: [react()]
});
Loading