WIP: Web support - #2143

Merged
mfazekas merged 3 commits into
mainfrom
mfazekas/web-support
Aug 22, 2022
Merged

WIP: Web support#2143
mfazekas merged 3 commits into
mainfrom
mfazekas/web-support

Conversation

@mfazekas

@mfazekasmfazekas commented Aug 21, 2022

Copy link
Copy Markdown
Contributor

Rebase of #861, this is just a POC.

Structure: package.json/browser points to index.web.js which the loads content form javascript/web directory that contains separate implementation of rnmapbox/maps on the mapbox-gl js api.

To consume:

yarn add @rnmapbox/maps

Extra steps for web:

  1. Add `mapbox-gl' dependency
yarn add mapbox-gl
  1. Configure web pack so that rnmapbox/maps is transpiled. @expo/webpack-config auto transpires packages starting with react-native- but rnmapbox has not `react-native in it's name, so it will not be transpired. See [Web] Work well in My Project ,but get error Module parse failed: Unexpected token in module  expo/expo-cli#3744 (comment) and https://github.com/expo/expo-cli/tree/master/packages/webpack-config#include-modules :
expo customize:web
module.exports = async function (env, argv) {
const config = await createExpoWebpackConfigAsync(
{
...env,
babel: { dangerouslyAddModulePathsToTranspile: ["@rnmapbox/maps"] },
},
argv
);
return config;
};

@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch 5 times, most recently from d3618f4 to f8bf028CompareAugust 21, 2022 10:06
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch from f8bf028 to b56b154CompareAugust 21, 2022 10:51
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch 4 times, most recently from 1624696 to 040fb27CompareAugust 21, 2022 19:29
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch from 040fb27 to b85b120CompareAugust 22, 2022 16:37
@mfazekas
mfazekas merged commit 4e8a8e3 into mainAug 22, 2022
@mfazekas
mfazekas deleted the mfazekas/web-support branch August 22, 2022 18:53
@mfazekasmfazekas mentioned this pull request Oct 13, 2022
@localjo

Copy link
Copy Markdown

This works for me, for rendering a map. Just to clarify, there is currently only support for MapView and Camera, but not yet for other components like ShapeSource, etc, so it's not possible yet to render data to the map?

I can look into contributing, but no promises how much I'll be able to do.

@localjo

Copy link
Copy Markdown

An alternative approach that might be more efficient for some is to use platform specific code for your map component, and write a separate map component for web and native. If you do all the data and state handling in parent component, you'll have very little to implement twice. https://reactnative.dev/docs/platform-specific-code#native-specific-extensions-ie-sharing-code-with-nodejs-and-web

@cglacet

cglacet commented Mar 4, 2023

Copy link
Copy Markdown

@mfazekas What is the state of this feature? I'm wondering if I should either invest time in doing what @localjo suggested but if there is a way to better share code I would gladdly use it.

@localjo could you give an implementation example of your web map?

I'm currently trying to test porting a react-native app that has a lot of maps in it. I'm using Nextjs and react-native-web.
My folder structure looks like this:

├── package.json
├── node_modules
├── ios
├── android
├── web
│ ├── package.json
│ ├── node_modules
│ ├── config.next.js
│ └── pages

My setup next config looks a bit like this:

// next.config.jsconstpath=require('path');constpackageJson=require('../package.json');constwithTM=require('next-transpile-modules');constwithImages=require('next-images');constmodulesToTranspile=[
...Object.keys(packageJson.dependencies).filter((dep)=>dep.startsWith('react-native')),];/** @type {import('next').NextConfig} */constconfiguration={transpilePackages: modulesToTranspile,compiler: {removeConsole: process.env.NODE_ENV==='production',},images: {disableStaticImages: true,},webpack: (config,{ buildId, dev, isServer, defaultLoaders, nextRuntime, webpack })=>{config.resolve.alias={
...(config.resolve.alias||{}),'react-native$': 'react-native-web','react-native-vector-icons/': 'react-native-vector-icons/dist/','react-native-linear-gradient': 'react-native-web-linear-gradient',};config.resolve.extensions=['.web.js','.web.ts','.web.tsx',
...config.resolve.extensions,];config.module.rules.push({test: /\.ttf$/,loader: 'url-loader',include: path.resolve(__dirname,'../node_modules/react-native-vector-icons'),});config.plugins.push(newwebpack.DefinePlugin({__DEV__: dev,}));returnconfig;},};module.exports=withImages(withTM(modulesToTranspile)(configuration));

So I only add to change this:

const modulesToTranspile = [
+ '@rnmapbox/maps',
...Object.keys(packageJson.dependencies).filter((dep) =>
dep.startsWith('react-native')
),
];

I didn't manage to install mapbox-gl in the web/node_modules, it was causing an error:

error - ../node_modules/@rnmapbox/maps/javascript/web/MapboxModule.js:1:0
Module not found: Can't resolve 'mapbox-gl'

But if I add mapbox-gl to the root node_modules it works (that seems a bit odd to have it defined in the root no?).

@mfazekas

Copy link
Copy Markdown
ContributorAuthor

@cglacet it's a proof of concept as this time. It's merged, but it's not really usefull at the moment. Waiting for community contributions...

@cglacet

Copy link
Copy Markdown

@mfazekas Peole at mapbox are still puting efforts in this repository or is this only maintained by benevolent people? (are they willing to support any work that is made here?)

@Ramon-Balaguer

Copy link
Copy Markdown

@mfazekas Do you know if there is a plan to move this?

@mfazekas

Copy link
Copy Markdown
ContributorAuthor

@Ramon-Balaguer this has been merged. There were some contributions so it's slowly improving.

https://rnmapbox.github.io/example-app/

Is the current example app.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mfazekas@localjo@cglacet@Ramon-Balaguer
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

WIP: Web support - #2143

Merged
mfazekas merged 3 commits into
mainfrom
mfazekas/web-support
Aug 22, 2022
Merged

WIP: Web support#2143
mfazekas merged 3 commits into
mainfrom
mfazekas/web-support

Conversation

@mfazekas

@mfazekasmfazekas commented Aug 21, 2022

Copy link
Copy Markdown
Contributor

Rebase of #861, this is just a POC.

Structure: package.json/browser points to index.web.js which the loads content form javascript/web directory that contains separate implementation of rnmapbox/maps on the mapbox-gl js api.

To consume:

yarn add @rnmapbox/maps

Extra steps for web:

  1. Add `mapbox-gl' dependency
yarn add mapbox-gl
  1. Configure web pack so that rnmapbox/maps is transpiled. @expo/webpack-config auto transpires packages starting with react-native- but rnmapbox has not `react-native in it's name, so it will not be transpired. See [Web] Work well in My Project ,but get error Module parse failed: Unexpected token in module  expo/expo-cli#3744 (comment) and https://github.com/expo/expo-cli/tree/master/packages/webpack-config#include-modules :
expo customize:web
module.exports = async function (env, argv) {
const config = await createExpoWebpackConfigAsync(
{
...env,
babel: { dangerouslyAddModulePathsToTranspile: ["@rnmapbox/maps"] },
},
argv
);
return config;
};

@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch 5 times, most recently from d3618f4 to f8bf028CompareAugust 21, 2022 10:06
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch from f8bf028 to b56b154CompareAugust 21, 2022 10:51
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch 4 times, most recently from 1624696 to 040fb27CompareAugust 21, 2022 19:29
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch from 040fb27 to b85b120CompareAugust 22, 2022 16:37
@mfazekas
mfazekas merged commit 4e8a8e3 into mainAug 22, 2022
@mfazekas
mfazekas deleted the mfazekas/web-support branch August 22, 2022 18:53
@mfazekasmfazekas mentioned this pull request Oct 13, 2022
@localjo

Copy link
Copy Markdown

This works for me, for rendering a map. Just to clarify, there is currently only support for MapView and Camera, but not yet for other components like ShapeSource, etc, so it's not possible yet to render data to the map?

I can look into contributing, but no promises how much I'll be able to do.

@localjo

Copy link
Copy Markdown

An alternative approach that might be more efficient for some is to use platform specific code for your map component, and write a separate map component for web and native. If you do all the data and state handling in parent component, you'll have very little to implement twice. https://reactnative.dev/docs/platform-specific-code#native-specific-extensions-ie-sharing-code-with-nodejs-and-web

@cglacet

cglacet commented Mar 4, 2023

Copy link
Copy Markdown

@mfazekas What is the state of this feature? I'm wondering if I should either invest time in doing what @localjo suggested but if there is a way to better share code I would gladdly use it.

@localjo could you give an implementation example of your web map?

I'm currently trying to test porting a react-native app that has a lot of maps in it. I'm using Nextjs and react-native-web.
My folder structure looks like this:

├── package.json
├── node_modules
├── ios
├── android
├── web
│ ├── package.json
│ ├── node_modules
│ ├── config.next.js
│ └── pages

My setup next config looks a bit like this:

// next.config.jsconstpath=require('path');constpackageJson=require('../package.json');constwithTM=require('next-transpile-modules');constwithImages=require('next-images');constmodulesToTranspile=[
...Object.keys(packageJson.dependencies).filter((dep)=>dep.startsWith('react-native')),];/** @type {import('next').NextConfig} */constconfiguration={transpilePackages: modulesToTranspile,compiler: {removeConsole: process.env.NODE_ENV==='production',},images: {disableStaticImages: true,},webpack: (config,{ buildId, dev, isServer, defaultLoaders, nextRuntime, webpack })=>{config.resolve.alias={
...(config.resolve.alias||{}),'react-native$': 'react-native-web','react-native-vector-icons/': 'react-native-vector-icons/dist/','react-native-linear-gradient': 'react-native-web-linear-gradient',};config.resolve.extensions=['.web.js','.web.ts','.web.tsx',
...config.resolve.extensions,];config.module.rules.push({test: /\.ttf$/,loader: 'url-loader',include: path.resolve(__dirname,'../node_modules/react-native-vector-icons'),});config.plugins.push(newwebpack.DefinePlugin({__DEV__: dev,}));returnconfig;},};module.exports=withImages(withTM(modulesToTranspile)(configuration));

So I only add to change this:

const modulesToTranspile = [
+ '@rnmapbox/maps',
...Object.keys(packageJson.dependencies).filter((dep) =>
dep.startsWith('react-native')
),
];

I didn't manage to install mapbox-gl in the web/node_modules, it was causing an error:

error - ../node_modules/@rnmapbox/maps/javascript/web/MapboxModule.js:1:0
Module not found: Can't resolve 'mapbox-gl'

But if I add mapbox-gl to the root node_modules it works (that seems a bit odd to have it defined in the root no?).

@mfazekas

Copy link
Copy Markdown
ContributorAuthor

@cglacet it's a proof of concept as this time. It's merged, but it's not really usefull at the moment. Waiting for community contributions...

@cglacet

Copy link
Copy Markdown

@mfazekas Peole at mapbox are still puting efforts in this repository or is this only maintained by benevolent people? (are they willing to support any work that is made here?)

@Ramon-Balaguer

Copy link
Copy Markdown

@mfazekas Do you know if there is a plan to move this?

@mfazekas

Copy link
Copy Markdown
ContributorAuthor

@Ramon-Balaguer this has been merged. There were some contributions so it's slowly improving.

https://rnmapbox.github.io/example-app/

Is the current example app.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mfazekas@localjo@cglacet@Ramon-Balaguer
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

WIP: Web support - #2143

Merged
mfazekas merged 3 commits into
mainfrom
mfazekas/web-support
Aug 22, 2022
Merged

WIP: Web support#2143
mfazekas merged 3 commits into
mainfrom
mfazekas/web-support

Conversation

@mfazekas

@mfazekasmfazekas commented Aug 21, 2022

Copy link
Copy Markdown
Contributor

Rebase of #861, this is just a POC.

Structure: package.json/browser points to index.web.js which the loads content form javascript/web directory that contains separate implementation of rnmapbox/maps on the mapbox-gl js api.

To consume:

yarn add @rnmapbox/maps

Extra steps for web:

  1. Add `mapbox-gl' dependency
yarn add mapbox-gl
  1. Configure web pack so that rnmapbox/maps is transpiled. @expo/webpack-config auto transpires packages starting with react-native- but rnmapbox has not `react-native in it's name, so it will not be transpired. See [Web] Work well in My Project ,but get error Module parse failed: Unexpected token in module  expo/expo-cli#3744 (comment) and https://github.com/expo/expo-cli/tree/master/packages/webpack-config#include-modules :
expo customize:web
module.exports = async function (env, argv) {
const config = await createExpoWebpackConfigAsync(
{
...env,
babel: { dangerouslyAddModulePathsToTranspile: ["@rnmapbox/maps"] },
},
argv
);
return config;
};

@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch 5 times, most recently from d3618f4 to f8bf028CompareAugust 21, 2022 10:06
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch from f8bf028 to b56b154CompareAugust 21, 2022 10:51
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch 4 times, most recently from 1624696 to 040fb27CompareAugust 21, 2022 19:29
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch from 040fb27 to b85b120CompareAugust 22, 2022 16:37
@mfazekas
mfazekas merged commit 4e8a8e3 into mainAug 22, 2022
@mfazekas
mfazekas deleted the mfazekas/web-support branch August 22, 2022 18:53
@mfazekasmfazekas mentioned this pull request Oct 13, 2022
@localjo

Copy link
Copy Markdown

This works for me, for rendering a map. Just to clarify, there is currently only support for MapView and Camera, but not yet for other components like ShapeSource, etc, so it's not possible yet to render data to the map?

I can look into contributing, but no promises how much I'll be able to do.

@localjo

Copy link
Copy Markdown

An alternative approach that might be more efficient for some is to use platform specific code for your map component, and write a separate map component for web and native. If you do all the data and state handling in parent component, you'll have very little to implement twice. https://reactnative.dev/docs/platform-specific-code#native-specific-extensions-ie-sharing-code-with-nodejs-and-web

@cglacet

cglacet commented Mar 4, 2023

Copy link
Copy Markdown

@mfazekas What is the state of this feature? I'm wondering if I should either invest time in doing what @localjo suggested but if there is a way to better share code I would gladdly use it.

@localjo could you give an implementation example of your web map?

I'm currently trying to test porting a react-native app that has a lot of maps in it. I'm using Nextjs and react-native-web.
My folder structure looks like this:

├── package.json
├── node_modules
├── ios
├── android
├── web
│ ├── package.json
│ ├── node_modules
│ ├── config.next.js
│ └── pages

My setup next config looks a bit like this:

// next.config.jsconstpath=require('path');constpackageJson=require('../package.json');constwithTM=require('next-transpile-modules');constwithImages=require('next-images');constmodulesToTranspile=[
...Object.keys(packageJson.dependencies).filter((dep)=>dep.startsWith('react-native')),];/** @type {import('next').NextConfig} */constconfiguration={transpilePackages: modulesToTranspile,compiler: {removeConsole: process.env.NODE_ENV==='production',},images: {disableStaticImages: true,},webpack: (config,{ buildId, dev, isServer, defaultLoaders, nextRuntime, webpack })=>{config.resolve.alias={
...(config.resolve.alias||{}),'react-native$': 'react-native-web','react-native-vector-icons/': 'react-native-vector-icons/dist/','react-native-linear-gradient': 'react-native-web-linear-gradient',};config.resolve.extensions=['.web.js','.web.ts','.web.tsx',
...config.resolve.extensions,];config.module.rules.push({test: /\.ttf$/,loader: 'url-loader',include: path.resolve(__dirname,'../node_modules/react-native-vector-icons'),});config.plugins.push(newwebpack.DefinePlugin({__DEV__: dev,}));returnconfig;},};module.exports=withImages(withTM(modulesToTranspile)(configuration));

So I only add to change this:

const modulesToTranspile = [
+ '@rnmapbox/maps',
...Object.keys(packageJson.dependencies).filter((dep) =>
dep.startsWith('react-native')
),
];

I didn't manage to install mapbox-gl in the web/node_modules, it was causing an error:

error - ../node_modules/@rnmapbox/maps/javascript/web/MapboxModule.js:1:0
Module not found: Can't resolve 'mapbox-gl'

But if I add mapbox-gl to the root node_modules it works (that seems a bit odd to have it defined in the root no?).

@mfazekas

Copy link
Copy Markdown
ContributorAuthor

@cglacet it's a proof of concept as this time. It's merged, but it's not really usefull at the moment. Waiting for community contributions...

@cglacet

Copy link
Copy Markdown

@mfazekas Peole at mapbox are still puting efforts in this repository or is this only maintained by benevolent people? (are they willing to support any work that is made here?)

@Ramon-Balaguer

Copy link
Copy Markdown

@mfazekas Do you know if there is a plan to move this?

@mfazekas

Copy link
Copy Markdown
ContributorAuthor

@Ramon-Balaguer this has been merged. There were some contributions so it's slowly improving.

https://rnmapbox.github.io/example-app/

Is the current example app.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mfazekas@localjo@cglacet@Ramon-Balaguer
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

WIP: Web support - #2143

Merged
mfazekas merged 3 commits into
mainfrom
mfazekas/web-support
Aug 22, 2022
Merged

WIP: Web support#2143
mfazekas merged 3 commits into
mainfrom
mfazekas/web-support

Conversation

@mfazekas

@mfazekasmfazekas commented Aug 21, 2022

Copy link
Copy Markdown
Contributor

Rebase of #861, this is just a POC.

Structure: package.json/browser points to index.web.js which the loads content form javascript/web directory that contains separate implementation of rnmapbox/maps on the mapbox-gl js api.

To consume:

yarn add @rnmapbox/maps

Extra steps for web:

  1. Add `mapbox-gl' dependency
yarn add mapbox-gl
  1. Configure web pack so that rnmapbox/maps is transpiled. @expo/webpack-config auto transpires packages starting with react-native- but rnmapbox has not `react-native in it's name, so it will not be transpired. See [Web] Work well in My Project ,but get error Module parse failed: Unexpected token in module  expo/expo-cli#3744 (comment) and https://github.com/expo/expo-cli/tree/master/packages/webpack-config#include-modules :
expo customize:web
module.exports = async function (env, argv) {
const config = await createExpoWebpackConfigAsync(
{
...env,
babel: { dangerouslyAddModulePathsToTranspile: ["@rnmapbox/maps"] },
},
argv
);
return config;
};

@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch 5 times, most recently from d3618f4 to f8bf028CompareAugust 21, 2022 10:06
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch from f8bf028 to b56b154CompareAugust 21, 2022 10:51
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch 4 times, most recently from 1624696 to 040fb27CompareAugust 21, 2022 19:29
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch from 040fb27 to b85b120CompareAugust 22, 2022 16:37
@mfazekas
mfazekas merged commit 4e8a8e3 into mainAug 22, 2022
@mfazekas
mfazekas deleted the mfazekas/web-support branch August 22, 2022 18:53
@mfazekasmfazekas mentioned this pull request Oct 13, 2022
@localjo

Copy link
Copy Markdown

This works for me, for rendering a map. Just to clarify, there is currently only support for MapView and Camera, but not yet for other components like ShapeSource, etc, so it's not possible yet to render data to the map?

I can look into contributing, but no promises how much I'll be able to do.

@localjo

Copy link
Copy Markdown

An alternative approach that might be more efficient for some is to use platform specific code for your map component, and write a separate map component for web and native. If you do all the data and state handling in parent component, you'll have very little to implement twice. https://reactnative.dev/docs/platform-specific-code#native-specific-extensions-ie-sharing-code-with-nodejs-and-web

@cglacet

cglacet commented Mar 4, 2023

Copy link
Copy Markdown

@mfazekas What is the state of this feature? I'm wondering if I should either invest time in doing what @localjo suggested but if there is a way to better share code I would gladdly use it.

@localjo could you give an implementation example of your web map?

I'm currently trying to test porting a react-native app that has a lot of maps in it. I'm using Nextjs and react-native-web.
My folder structure looks like this:

├── package.json
├── node_modules
├── ios
├── android
├── web
│ ├── package.json
│ ├── node_modules
│ ├── config.next.js
│ └── pages

My setup next config looks a bit like this:

// next.config.jsconstpath=require('path');constpackageJson=require('../package.json');constwithTM=require('next-transpile-modules');constwithImages=require('next-images');constmodulesToTranspile=[
...Object.keys(packageJson.dependencies).filter((dep)=>dep.startsWith('react-native')),];/** @type {import('next').NextConfig} */constconfiguration={transpilePackages: modulesToTranspile,compiler: {removeConsole: process.env.NODE_ENV==='production',},images: {disableStaticImages: true,},webpack: (config,{ buildId, dev, isServer, defaultLoaders, nextRuntime, webpack })=>{config.resolve.alias={
...(config.resolve.alias||{}),'react-native$': 'react-native-web','react-native-vector-icons/': 'react-native-vector-icons/dist/','react-native-linear-gradient': 'react-native-web-linear-gradient',};config.resolve.extensions=['.web.js','.web.ts','.web.tsx',
...config.resolve.extensions,];config.module.rules.push({test: /\.ttf$/,loader: 'url-loader',include: path.resolve(__dirname,'../node_modules/react-native-vector-icons'),});config.plugins.push(newwebpack.DefinePlugin({__DEV__: dev,}));returnconfig;},};module.exports=withImages(withTM(modulesToTranspile)(configuration));

So I only add to change this:

const modulesToTranspile = [
+ '@rnmapbox/maps',
...Object.keys(packageJson.dependencies).filter((dep) =>
dep.startsWith('react-native')
),
];

I didn't manage to install mapbox-gl in the web/node_modules, it was causing an error:

error - ../node_modules/@rnmapbox/maps/javascript/web/MapboxModule.js:1:0
Module not found: Can't resolve 'mapbox-gl'

But if I add mapbox-gl to the root node_modules it works (that seems a bit odd to have it defined in the root no?).

@mfazekas

Copy link
Copy Markdown
ContributorAuthor

@cglacet it's a proof of concept as this time. It's merged, but it's not really usefull at the moment. Waiting for community contributions...

@cglacet

Copy link
Copy Markdown

@mfazekas Peole at mapbox are still puting efforts in this repository or is this only maintained by benevolent people? (are they willing to support any work that is made here?)

@Ramon-Balaguer

Copy link
Copy Markdown

@mfazekas Do you know if there is a plan to move this?

@mfazekas

Copy link
Copy Markdown
ContributorAuthor

@Ramon-Balaguer this has been merged. There were some contributions so it's slowly improving.

https://rnmapbox.github.io/example-app/

Is the current example app.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mfazekas@localjo@cglacet@Ramon-Balaguer
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

WIP: Web support - #2143

Merged
mfazekas merged 3 commits into
mainfrom
mfazekas/web-support
Aug 22, 2022
Merged

WIP: Web support#2143
mfazekas merged 3 commits into
mainfrom
mfazekas/web-support

Conversation

@mfazekas

@mfazekasmfazekas commented Aug 21, 2022

Copy link
Copy Markdown
Contributor

Rebase of #861, this is just a POC.

Structure: package.json/browser points to index.web.js which the loads content form javascript/web directory that contains separate implementation of rnmapbox/maps on the mapbox-gl js api.

To consume:

yarn add @rnmapbox/maps

Extra steps for web:

  1. Add `mapbox-gl' dependency
yarn add mapbox-gl
  1. Configure web pack so that rnmapbox/maps is transpiled. @expo/webpack-config auto transpires packages starting with react-native- but rnmapbox has not `react-native in it's name, so it will not be transpired. See [Web] Work well in My Project ,but get error Module parse failed: Unexpected token in module  expo/expo-cli#3744 (comment) and https://github.com/expo/expo-cli/tree/master/packages/webpack-config#include-modules :
expo customize:web
module.exports = async function (env, argv) {
const config = await createExpoWebpackConfigAsync(
{
...env,
babel: { dangerouslyAddModulePathsToTranspile: ["@rnmapbox/maps"] },
},
argv
);
return config;
};

@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch 5 times, most recently from d3618f4 to f8bf028CompareAugust 21, 2022 10:06
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch from f8bf028 to b56b154CompareAugust 21, 2022 10:51
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch 4 times, most recently from 1624696 to 040fb27CompareAugust 21, 2022 19:29
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch from 040fb27 to b85b120CompareAugust 22, 2022 16:37
@mfazekas
mfazekas merged commit 4e8a8e3 into mainAug 22, 2022
@mfazekas
mfazekas deleted the mfazekas/web-support branch August 22, 2022 18:53
@mfazekasmfazekas mentioned this pull request Oct 13, 2022
@localjo

Copy link
Copy Markdown

This works for me, for rendering a map. Just to clarify, there is currently only support for MapView and Camera, but not yet for other components like ShapeSource, etc, so it's not possible yet to render data to the map?

I can look into contributing, but no promises how much I'll be able to do.

@localjo

Copy link
Copy Markdown

An alternative approach that might be more efficient for some is to use platform specific code for your map component, and write a separate map component for web and native. If you do all the data and state handling in parent component, you'll have very little to implement twice. https://reactnative.dev/docs/platform-specific-code#native-specific-extensions-ie-sharing-code-with-nodejs-and-web

@cglacet

cglacet commented Mar 4, 2023

Copy link
Copy Markdown

@mfazekas What is the state of this feature? I'm wondering if I should either invest time in doing what @localjo suggested but if there is a way to better share code I would gladdly use it.

@localjo could you give an implementation example of your web map?

I'm currently trying to test porting a react-native app that has a lot of maps in it. I'm using Nextjs and react-native-web.
My folder structure looks like this:

├── package.json
├── node_modules
├── ios
├── android
├── web
│ ├── package.json
│ ├── node_modules
│ ├── config.next.js
│ └── pages

My setup next config looks a bit like this:

// next.config.jsconstpath=require('path');constpackageJson=require('../package.json');constwithTM=require('next-transpile-modules');constwithImages=require('next-images');constmodulesToTranspile=[
...Object.keys(packageJson.dependencies).filter((dep)=>dep.startsWith('react-native')),];/** @type {import('next').NextConfig} */constconfiguration={transpilePackages: modulesToTranspile,compiler: {removeConsole: process.env.NODE_ENV==='production',},images: {disableStaticImages: true,},webpack: (config,{ buildId, dev, isServer, defaultLoaders, nextRuntime, webpack })=>{config.resolve.alias={
...(config.resolve.alias||{}),'react-native$': 'react-native-web','react-native-vector-icons/': 'react-native-vector-icons/dist/','react-native-linear-gradient': 'react-native-web-linear-gradient',};config.resolve.extensions=['.web.js','.web.ts','.web.tsx',
...config.resolve.extensions,];config.module.rules.push({test: /\.ttf$/,loader: 'url-loader',include: path.resolve(__dirname,'../node_modules/react-native-vector-icons'),});config.plugins.push(newwebpack.DefinePlugin({__DEV__: dev,}));returnconfig;},};module.exports=withImages(withTM(modulesToTranspile)(configuration));

So I only add to change this:

const modulesToTranspile = [
+ '@rnmapbox/maps',
...Object.keys(packageJson.dependencies).filter((dep) =>
dep.startsWith('react-native')
),
];

I didn't manage to install mapbox-gl in the web/node_modules, it was causing an error:

error - ../node_modules/@rnmapbox/maps/javascript/web/MapboxModule.js:1:0
Module not found: Can't resolve 'mapbox-gl'

But if I add mapbox-gl to the root node_modules it works (that seems a bit odd to have it defined in the root no?).

@mfazekas

Copy link
Copy Markdown
ContributorAuthor

@cglacet it's a proof of concept as this time. It's merged, but it's not really usefull at the moment. Waiting for community contributions...

@cglacet

Copy link
Copy Markdown

@mfazekas Peole at mapbox are still puting efforts in this repository or is this only maintained by benevolent people? (are they willing to support any work that is made here?)

@Ramon-Balaguer

Copy link
Copy Markdown

@mfazekas Do you know if there is a plan to move this?

@mfazekas

Copy link
Copy Markdown
ContributorAuthor

@Ramon-Balaguer this has been merged. There were some contributions so it's slowly improving.

https://rnmapbox.github.io/example-app/

Is the current example app.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mfazekas@localjo@cglacet@Ramon-Balaguer
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

WIP: Web support - #2143

Merged
mfazekas merged 3 commits into
mainfrom
mfazekas/web-support
Aug 22, 2022
Merged

WIP: Web support#2143
mfazekas merged 3 commits into
mainfrom
mfazekas/web-support

Conversation

@mfazekas

@mfazekasmfazekas commented Aug 21, 2022

Copy link
Copy Markdown
Contributor

Rebase of #861, this is just a POC.

Structure: package.json/browser points to index.web.js which the loads content form javascript/web directory that contains separate implementation of rnmapbox/maps on the mapbox-gl js api.

To consume:

yarn add @rnmapbox/maps

Extra steps for web:

  1. Add `mapbox-gl' dependency
yarn add mapbox-gl
  1. Configure web pack so that rnmapbox/maps is transpiled. @expo/webpack-config auto transpires packages starting with react-native- but rnmapbox has not `react-native in it's name, so it will not be transpired. See [Web] Work well in My Project ,but get error Module parse failed: Unexpected token in module  expo/expo-cli#3744 (comment) and https://github.com/expo/expo-cli/tree/master/packages/webpack-config#include-modules :
expo customize:web
module.exports = async function (env, argv) {
const config = await createExpoWebpackConfigAsync(
{
...env,
babel: { dangerouslyAddModulePathsToTranspile: ["@rnmapbox/maps"] },
},
argv
);
return config;
};

@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch 5 times, most recently from d3618f4 to f8bf028CompareAugust 21, 2022 10:06
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch from f8bf028 to b56b154CompareAugust 21, 2022 10:51
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch 4 times, most recently from 1624696 to 040fb27CompareAugust 21, 2022 19:29
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch from 040fb27 to b85b120CompareAugust 22, 2022 16:37
@mfazekas
mfazekas merged commit 4e8a8e3 into mainAug 22, 2022
@mfazekas
mfazekas deleted the mfazekas/web-support branch August 22, 2022 18:53
@mfazekasmfazekas mentioned this pull request Oct 13, 2022
@localjo

Copy link
Copy Markdown

This works for me, for rendering a map. Just to clarify, there is currently only support for MapView and Camera, but not yet for other components like ShapeSource, etc, so it's not possible yet to render data to the map?

I can look into contributing, but no promises how much I'll be able to do.

@localjo

Copy link
Copy Markdown

An alternative approach that might be more efficient for some is to use platform specific code for your map component, and write a separate map component for web and native. If you do all the data and state handling in parent component, you'll have very little to implement twice. https://reactnative.dev/docs/platform-specific-code#native-specific-extensions-ie-sharing-code-with-nodejs-and-web

@cglacet

cglacet commented Mar 4, 2023

Copy link
Copy Markdown

@mfazekas What is the state of this feature? I'm wondering if I should either invest time in doing what @localjo suggested but if there is a way to better share code I would gladdly use it.

@localjo could you give an implementation example of your web map?

I'm currently trying to test porting a react-native app that has a lot of maps in it. I'm using Nextjs and react-native-web.
My folder structure looks like this:

├── package.json
├── node_modules
├── ios
├── android
├── web
│ ├── package.json
│ ├── node_modules
│ ├── config.next.js
│ └── pages

My setup next config looks a bit like this:

// next.config.jsconstpath=require('path');constpackageJson=require('../package.json');constwithTM=require('next-transpile-modules');constwithImages=require('next-images');constmodulesToTranspile=[
...Object.keys(packageJson.dependencies).filter((dep)=>dep.startsWith('react-native')),];/** @type {import('next').NextConfig} */constconfiguration={transpilePackages: modulesToTranspile,compiler: {removeConsole: process.env.NODE_ENV==='production',},images: {disableStaticImages: true,},webpack: (config,{ buildId, dev, isServer, defaultLoaders, nextRuntime, webpack })=>{config.resolve.alias={
...(config.resolve.alias||{}),'react-native$': 'react-native-web','react-native-vector-icons/': 'react-native-vector-icons/dist/','react-native-linear-gradient': 'react-native-web-linear-gradient',};config.resolve.extensions=['.web.js','.web.ts','.web.tsx',
...config.resolve.extensions,];config.module.rules.push({test: /\.ttf$/,loader: 'url-loader',include: path.resolve(__dirname,'../node_modules/react-native-vector-icons'),});config.plugins.push(newwebpack.DefinePlugin({__DEV__: dev,}));returnconfig;},};module.exports=withImages(withTM(modulesToTranspile)(configuration));

So I only add to change this:

const modulesToTranspile = [
+ '@rnmapbox/maps',
...Object.keys(packageJson.dependencies).filter((dep) =>
dep.startsWith('react-native')
),
];

I didn't manage to install mapbox-gl in the web/node_modules, it was causing an error:

error - ../node_modules/@rnmapbox/maps/javascript/web/MapboxModule.js:1:0
Module not found: Can't resolve 'mapbox-gl'

But if I add mapbox-gl to the root node_modules it works (that seems a bit odd to have it defined in the root no?).

@mfazekas

Copy link
Copy Markdown
ContributorAuthor

@cglacet it's a proof of concept as this time. It's merged, but it's not really usefull at the moment. Waiting for community contributions...

@cglacet

Copy link
Copy Markdown

@mfazekas Peole at mapbox are still puting efforts in this repository or is this only maintained by benevolent people? (are they willing to support any work that is made here?)

@Ramon-Balaguer

Copy link
Copy Markdown

@mfazekas Do you know if there is a plan to move this?

@mfazekas

Copy link
Copy Markdown
ContributorAuthor

@Ramon-Balaguer this has been merged. There were some contributions so it's slowly improving.

https://rnmapbox.github.io/example-app/

Is the current example app.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mfazekas@localjo@cglacet@Ramon-Balaguer
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

WIP: Web support - #2143

Merged
mfazekas merged 3 commits into
mainfrom
mfazekas/web-support
Aug 22, 2022
Merged

WIP: Web support#2143
mfazekas merged 3 commits into
mainfrom
mfazekas/web-support

Conversation

@mfazekas

@mfazekasmfazekas commented Aug 21, 2022

Copy link
Copy Markdown
Contributor

Rebase of #861, this is just a POC.

Structure: package.json/browser points to index.web.js which the loads content form javascript/web directory that contains separate implementation of rnmapbox/maps on the mapbox-gl js api.

To consume:

yarn add @rnmapbox/maps

Extra steps for web:

  1. Add `mapbox-gl' dependency
yarn add mapbox-gl
  1. Configure web pack so that rnmapbox/maps is transpiled. @expo/webpack-config auto transpires packages starting with react-native- but rnmapbox has not `react-native in it's name, so it will not be transpired. See [Web] Work well in My Project ,but get error Module parse failed: Unexpected token in module  expo/expo-cli#3744 (comment) and https://github.com/expo/expo-cli/tree/master/packages/webpack-config#include-modules :
expo customize:web
module.exports = async function (env, argv) {
const config = await createExpoWebpackConfigAsync(
{
...env,
babel: { dangerouslyAddModulePathsToTranspile: ["@rnmapbox/maps"] },
},
argv
);
return config;
};

@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch 5 times, most recently from d3618f4 to f8bf028CompareAugust 21, 2022 10:06
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch from f8bf028 to b56b154CompareAugust 21, 2022 10:51
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch 4 times, most recently from 1624696 to 040fb27CompareAugust 21, 2022 19:29
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch from 040fb27 to b85b120CompareAugust 22, 2022 16:37
@mfazekas
mfazekas merged commit 4e8a8e3 into mainAug 22, 2022
@mfazekas
mfazekas deleted the mfazekas/web-support branch August 22, 2022 18:53
@mfazekasmfazekas mentioned this pull request Oct 13, 2022
@localjo

Copy link
Copy Markdown

This works for me, for rendering a map. Just to clarify, there is currently only support for MapView and Camera, but not yet for other components like ShapeSource, etc, so it's not possible yet to render data to the map?

I can look into contributing, but no promises how much I'll be able to do.

@localjo

Copy link
Copy Markdown

An alternative approach that might be more efficient for some is to use platform specific code for your map component, and write a separate map component for web and native. If you do all the data and state handling in parent component, you'll have very little to implement twice. https://reactnative.dev/docs/platform-specific-code#native-specific-extensions-ie-sharing-code-with-nodejs-and-web

@cglacet

cglacet commented Mar 4, 2023

Copy link
Copy Markdown

@mfazekas What is the state of this feature? I'm wondering if I should either invest time in doing what @localjo suggested but if there is a way to better share code I would gladdly use it.

@localjo could you give an implementation example of your web map?

I'm currently trying to test porting a react-native app that has a lot of maps in it. I'm using Nextjs and react-native-web.
My folder structure looks like this:

├── package.json
├── node_modules
├── ios
├── android
├── web
│ ├── package.json
│ ├── node_modules
│ ├── config.next.js
│ └── pages

My setup next config looks a bit like this:

// next.config.jsconstpath=require('path');constpackageJson=require('../package.json');constwithTM=require('next-transpile-modules');constwithImages=require('next-images');constmodulesToTranspile=[
...Object.keys(packageJson.dependencies).filter((dep)=>dep.startsWith('react-native')),];/** @type {import('next').NextConfig} */constconfiguration={transpilePackages: modulesToTranspile,compiler: {removeConsole: process.env.NODE_ENV==='production',},images: {disableStaticImages: true,},webpack: (config,{ buildId, dev, isServer, defaultLoaders, nextRuntime, webpack })=>{config.resolve.alias={
...(config.resolve.alias||{}),'react-native$': 'react-native-web','react-native-vector-icons/': 'react-native-vector-icons/dist/','react-native-linear-gradient': 'react-native-web-linear-gradient',};config.resolve.extensions=['.web.js','.web.ts','.web.tsx',
...config.resolve.extensions,];config.module.rules.push({test: /\.ttf$/,loader: 'url-loader',include: path.resolve(__dirname,'../node_modules/react-native-vector-icons'),});config.plugins.push(newwebpack.DefinePlugin({__DEV__: dev,}));returnconfig;},};module.exports=withImages(withTM(modulesToTranspile)(configuration));

So I only add to change this:

const modulesToTranspile = [
+ '@rnmapbox/maps',
...Object.keys(packageJson.dependencies).filter((dep) =>
dep.startsWith('react-native')
),
];

I didn't manage to install mapbox-gl in the web/node_modules, it was causing an error:

error - ../node_modules/@rnmapbox/maps/javascript/web/MapboxModule.js:1:0
Module not found: Can't resolve 'mapbox-gl'

But if I add mapbox-gl to the root node_modules it works (that seems a bit odd to have it defined in the root no?).

@mfazekas

Copy link
Copy Markdown
ContributorAuthor

@cglacet it's a proof of concept as this time. It's merged, but it's not really usefull at the moment. Waiting for community contributions...

@cglacet

Copy link
Copy Markdown

@mfazekas Peole at mapbox are still puting efforts in this repository or is this only maintained by benevolent people? (are they willing to support any work that is made here?)

@Ramon-Balaguer

Copy link
Copy Markdown

@mfazekas Do you know if there is a plan to move this?

@mfazekas

Copy link
Copy Markdown
ContributorAuthor

@Ramon-Balaguer this has been merged. There were some contributions so it's slowly improving.

https://rnmapbox.github.io/example-app/

Is the current example app.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mfazekas@localjo@cglacet@Ramon-Balaguer
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

WIP: Web support - #2143

Merged
mfazekas merged 3 commits into
mainfrom
mfazekas/web-support
Aug 22, 2022
Merged

WIP: Web support#2143
mfazekas merged 3 commits into
mainfrom
mfazekas/web-support

Conversation

@mfazekas

@mfazekasmfazekas commented Aug 21, 2022

Copy link
Copy Markdown
Contributor

Rebase of #861, this is just a POC.

Structure: package.json/browser points to index.web.js which the loads content form javascript/web directory that contains separate implementation of rnmapbox/maps on the mapbox-gl js api.

To consume:

yarn add @rnmapbox/maps

Extra steps for web:

  1. Add `mapbox-gl' dependency
yarn add mapbox-gl
  1. Configure web pack so that rnmapbox/maps is transpiled. @expo/webpack-config auto transpires packages starting with react-native- but rnmapbox has not `react-native in it's name, so it will not be transpired. See [Web] Work well in My Project ,but get error Module parse failed: Unexpected token in module  expo/expo-cli#3744 (comment) and https://github.com/expo/expo-cli/tree/master/packages/webpack-config#include-modules :
expo customize:web
module.exports = async function (env, argv) {
const config = await createExpoWebpackConfigAsync(
{
...env,
babel: { dangerouslyAddModulePathsToTranspile: ["@rnmapbox/maps"] },
},
argv
);
return config;
};

@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch 5 times, most recently from d3618f4 to f8bf028CompareAugust 21, 2022 10:06
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch from f8bf028 to b56b154CompareAugust 21, 2022 10:51
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch 4 times, most recently from 1624696 to 040fb27CompareAugust 21, 2022 19:29
@mfazekas
mfazekasforce-pushed the mfazekas/web-support branch from 040fb27 to b85b120CompareAugust 22, 2022 16:37
@mfazekas
mfazekas merged commit 4e8a8e3 into mainAug 22, 2022
@mfazekas
mfazekas deleted the mfazekas/web-support branch August 22, 2022 18:53
@mfazekasmfazekas mentioned this pull request Oct 13, 2022
@localjo

Copy link
Copy Markdown

This works for me, for rendering a map. Just to clarify, there is currently only support for MapView and Camera, but not yet for other components like ShapeSource, etc, so it's not possible yet to render data to the map?

I can look into contributing, but no promises how much I'll be able to do.

@localjo

Copy link
Copy Markdown

An alternative approach that might be more efficient for some is to use platform specific code for your map component, and write a separate map component for web and native. If you do all the data and state handling in parent component, you'll have very little to implement twice. https://reactnative.dev/docs/platform-specific-code#native-specific-extensions-ie-sharing-code-with-nodejs-and-web

@cglacet

cglacet commented Mar 4, 2023

Copy link
Copy Markdown

@mfazekas What is the state of this feature? I'm wondering if I should either invest time in doing what @localjo suggested but if there is a way to better share code I would gladdly use it.

@localjo could you give an implementation example of your web map?

I'm currently trying to test porting a react-native app that has a lot of maps in it. I'm using Nextjs and react-native-web.
My folder structure looks like this:

├── package.json
├── node_modules
├── ios
├── android
├── web
│ ├── package.json
│ ├── node_modules
│ ├── config.next.js
│ └── pages

My setup next config looks a bit like this:

// next.config.jsconstpath=require('path');constpackageJson=require('../package.json');constwithTM=require('next-transpile-modules');constwithImages=require('next-images');constmodulesToTranspile=[
...Object.keys(packageJson.dependencies).filter((dep)=>dep.startsWith('react-native')),];/** @type {import('next').NextConfig} */constconfiguration={transpilePackages: modulesToTranspile,compiler: {removeConsole: process.env.NODE_ENV==='production',},images: {disableStaticImages: true,},webpack: (config,{ buildId, dev, isServer, defaultLoaders, nextRuntime, webpack })=>{config.resolve.alias={
...(config.resolve.alias||{}),'react-native$': 'react-native-web','react-native-vector-icons/': 'react-native-vector-icons/dist/','react-native-linear-gradient': 'react-native-web-linear-gradient',};config.resolve.extensions=['.web.js','.web.ts','.web.tsx',
...config.resolve.extensions,];config.module.rules.push({test: /\.ttf$/,loader: 'url-loader',include: path.resolve(__dirname,'../node_modules/react-native-vector-icons'),});config.plugins.push(newwebpack.DefinePlugin({__DEV__: dev,}));returnconfig;},};module.exports=withImages(withTM(modulesToTranspile)(configuration));

So I only add to change this:

const modulesToTranspile = [
+ '@rnmapbox/maps',
...Object.keys(packageJson.dependencies).filter((dep) =>
dep.startsWith('react-native')
),
];

I didn't manage to install mapbox-gl in the web/node_modules, it was causing an error:

error - ../node_modules/@rnmapbox/maps/javascript/web/MapboxModule.js:1:0
Module not found: Can't resolve 'mapbox-gl'

But if I add mapbox-gl to the root node_modules it works (that seems a bit odd to have it defined in the root no?).

@mfazekas

Copy link
Copy Markdown
ContributorAuthor

@cglacet it's a proof of concept as this time. It's merged, but it's not really usefull at the moment. Waiting for community contributions...

@cglacet

Copy link
Copy Markdown

@mfazekas Peole at mapbox are still puting efforts in this repository or is this only maintained by benevolent people? (are they willing to support any work that is made here?)

@Ramon-Balaguer

Copy link
Copy Markdown

@mfazekas Do you know if there is a plan to move this?

@mfazekas

Copy link
Copy Markdown
ContributorAuthor

@Ramon-Balaguer this has been merged. There were some contributions so it's slowly improving.

https://rnmapbox.github.io/example-app/

Is the current example app.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@mfazekas@localjo@cglacet@Ramon-Balaguer