Skip to content

Commit c994b59

Browse files
adhami3310masenf
andauthored
[0.8] [ENG-5825] remix over next (#4984)
* remix over next * make 404 page work * get layout working again * in theory, one can get rid of jsx, but that would be craaazy * Fix aria-* and other hiphenated props in `jsx` mode * compiler: preserve `app/routes.js` when purging this file only gets copied during `reflex init`, so don't blow it away * remove next/link stuff from `rx.link` * completely remove jsx files and replace them with js files * fix special props handling * fix empty name * fix reflex web syntax error * fix dynamic rendering * bring helmet to fix issues with head in component, bonus fix for next/script to make reflex web compile * got distracted * oh well * add helmet pyi * change vite config to fix builds * one should format their js files, prettier said * precommit * try to optimize jsx import * i don't know what i'm doing here * do this until we figure out how to fix that issue * ssr back to false * fix static directory name * merge changes * pyi * update versions * use unstable_optimizeDeps * reset testing py * remove helmet pyi and make the tests wait for token * please * add timeout and log * add logs for polling * add logs for starting backend * python buffered * require node 20 * add logs for line * repr the line * remove ansi * remove -s * brings back s for some time * maybe * no color * remove -s now? * fix redirects * maybe ? i'm not sure * move some of the config * make unit test cases pass * fix the checkpoints for react router * do some stuff with the url * fix client storage * yea that guy isn't happy * fix for react moment * fix three tests * try stuff with prerender * make it only on export * fix lazy components * prerender fix units * i couldn't get this guy to work but at least make some progress * fix tailwind test * fix test_event_actions * this shit is weird * simplify things further * precommit * remove / * fix datetime * make some progress on test dynamic route * remove work that wouldn't work * precommit * dynamic icon fix * merge * precommit * bring back some notion of link * remove weird component * fix dynamic route * app * update tailwind plugins * update pyi hashes * precommit * remove helmet * fix tests * fix config for esm * Revert "remove helmet" This reverts commit 2f300d1. * bring back helmet but only for scripts * upgrade react * fix cls * use rolldown * add sitemap * add deploy url handling * make native plugin only run on build * remove enableNativePlugin for now * remove setup frontend test * always have --bun ? * maybe * ok we can't get around that * we could do this though * fix pyi * Match static route before dynamic route for on_load * enable sitemap plugin * fix tailwind * also set inline colorScheme when the theme changes * upgrade RR * handle preset * removed unused ignore * fix build time and checkpoints * make frontend listening regex handle dev and prod * [ENG-6295] missing stylesheet issue (#5446) When the app specified custom `head_components`, the default meta was not being included. * add fix for strict mode being there all the time * prerender routes on prod mode (#5447) * [ENG-6294] fix test_event_actions for react-router When pushing an empty fragment onto react router, the page url does not actually change. * assert children * debounce input is default * grid into no ssr * pyi * [ENG-6292] add explicit on_mount StrictMode test cases * optimize REACT_ROUTER_LINK_PROPS check --------- Co-authored-by: Masen Furer <m_github@0x26.net>
1 parent 7f88d9d commit c994b59

91 files changed

Lines changed: 1423 additions & 1044 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/actions/setup_build_env/action.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ runs:
3434
prune-cache: false
3535
activate-environment: true
3636
cache-dependency-glob: "uv.lock"
37+
- name: Setup Node
38+
uses: actions/setup-node@v4
39+
with:
40+
node-version: 22
3741
- name: Install Dependencies
3842
if: inputs.run-uv-sync == 'true'
3943
run: uv sync

.github/workflows/integration_app_harness.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ on:
1515
- "**/*.md"
1616
env:
1717
APP_HARNESS_HEADLESS: 1
18+
PYTHONUNBUFFERED: 1
1819

1920
permissions:
2021
contents: read

pyi_hashes.json

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,23 @@
11
{
2-
"reflex/__init__.pyi": "3afc0049639ae1663f916dd91e653dfe",
3-
"reflex/components/__init__.pyi": "f3a4ccd8979222bdad1b8649f6734a6d",
4-
"reflex/components/base/__init__.pyi": "e9aaf47be1e1977eacee97b880c8f7de",
2+
"reflex/__init__.pyi": "0ca4974ab0fc44525e061ad39dd338fa",
3+
"reflex/components/__init__.pyi": "f424d22ce0caa9375180195c273eb59c",
4+
"reflex/components/base/__init__.pyi": "74d7764e03837231ea40a06dff08f44a",
55
"reflex/components/base/app_wrap.pyi": "5c2daf49c552c40d1247d998e200d01c",
66
"reflex/components/base/body.pyi": "b1df93ecdea60baf1495ef52aa742f31",
7-
"reflex/components/base/document.pyi": "018f0207324a9cd4bac6d209fe3ae324",
7+
"reflex/components/base/document.pyi": "f6e2dc26993b5481008da554356c6009",
88
"reflex/components/base/error_boundary.pyi": "42779d76ea6bc2847a33533cdac23f21",
99
"reflex/components/base/fragment.pyi": "b77ee8f55c73f45abf515ddbeb29c594",
10-
"reflex/components/base/head.pyi": "31debbe85c37c40d8166504de121f905",
1110
"reflex/components/base/link.pyi": "1cdc04cf0fbb2e2ed73feeb67aa55729",
1211
"reflex/components/base/meta.pyi": "cdfb479b6140d5768285dfa7713774da",
13-
"reflex/components/base/script.pyi": "29fcfe9d4655bdc020362eb780d0fa46",
12+
"reflex/components/base/script.pyi": "eff80f98522bb4629bac5b55546bbeb2",
1413
"reflex/components/base/strict_mode.pyi": "1d05089b3f201d3fcccde3a62a854d34",
15-
"reflex/components/core/__init__.pyi": "44bcee7bc4e27e2f4f4707b843acf291",
14+
"reflex/components/core/__init__.pyi": "d99fbfd4207d8a3f7013221f428e0ed8",
1615
"reflex/components/core/auto_scroll.pyi": "fd6e78c419cd4b5ce77512f95603f9c9",
1716
"reflex/components/core/banner.pyi": "75f64f49f7f1157f01f1e003737d2eda",
18-
"reflex/components/core/client_side_routing.pyi": "c961a842715a99468110784224140c2c",
17+
"reflex/components/core/client_side_routing.pyi": "df659032437ba52bbb94303fa54e1a46",
1918
"reflex/components/core/clipboard.pyi": "e009ca6d0be9127d8acafbe959334ada",
2019
"reflex/components/core/debounce.pyi": "72852ec7c60742122689b3c90740d276",
20+
"reflex/components/core/helmet.pyi": "499a351957d7ef03c6b29bbbff699dce",
2121
"reflex/components/core/html.pyi": "41c22b41433ec50ba9e07de813b764e6",
2222
"reflex/components/core/sticky.pyi": "66c4ce29e7f9419bbb2101278973c0e0",
2323
"reflex/components/core/upload.pyi": "90039579d573a7aa887d40889ced6154",
@@ -38,13 +38,10 @@
3838
"reflex/components/el/elements/sectioning.pyi": "029b957c3da82d747a297811e9d71a43",
3939
"reflex/components/el/elements/tables.pyi": "60ce25fd601003dfadd78d3081b86795",
4040
"reflex/components/el/elements/typography.pyi": "3c4d82d4c61c84af85023d180631b081",
41-
"reflex/components/gridjs/datatable.pyi": "963021af448b5f22960d521107194a87",
41+
"reflex/components/gridjs/datatable.pyi": "1b8232fd3e839c6ae772db3d211cd632",
4242
"reflex/components/lucide/icon.pyi": "b544769b37f1155ce97a170a21d1bcad",
4343
"reflex/components/markdown/markdown.pyi": "3c818ed8f3a99edcba66ff00ec313f13",
4444
"reflex/components/moment/moment.pyi": "77e40c9afd511fb046134e2581d8a3bd",
45-
"reflex/components/next/base.pyi": "d445d407bf74ef571712632f1fc24c31",
46-
"reflex/components/next/image.pyi": "bca53a266ce8159cf0e8ff30c65cf913",
47-
"reflex/components/next/link.pyi": "dfb53816a637fb81955b529e7824be47",
4845
"reflex/components/plotly/plotly.pyi": "8362d4dd3d5c57af79a8bc8d2dbe82c9",
4946
"reflex/components/radix/__init__.pyi": "8d586cbff1d7130d09476ac72ee73400",
5047
"reflex/components/radix/primitives/__init__.pyi": "fe8715decf3e9ae471b56bba14e42cb3",
@@ -108,7 +105,7 @@
108105
"reflex/components/radix/themes/typography/blockquote.pyi": "5ac7c554663caed708e1a41a183a9bcb",
109106
"reflex/components/radix/themes/typography/code.pyi": "5cbff824db591c92bc207066f2c0004e",
110107
"reflex/components/radix/themes/typography/heading.pyi": "bb34ff7af2491bd7c424d378940a58c5",
111-
"reflex/components/radix/themes/typography/link.pyi": "330158527b84c9e72ee7abf95d1217d3",
108+
"reflex/components/radix/themes/typography/link.pyi": "97073a20f49b809a2713f0496fd9225c",
112109
"reflex/components/radix/themes/typography/text.pyi": "cf2896cf1503d8196c5ca5b06914245f",
113110
"reflex/components/react_player/audio.pyi": "c6cadf0f3db3892a7cda64e5672f4465",
114111
"reflex/components/react_player/react_player.pyi": "4f1fbff94bbe714e56697a1d0b462bef",

reflex/.templates/jinja/app/rxconfig.py.jinja2

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import reflex as rx
33
config = rx.Config(
44
app_name="{{ app_name }}",
55
plugins=[
6+
rx.plugins.SitemapPlugin(),
67
rx.plugins.TailwindV4Plugin(),
78
],
89
)

reflex/.templates/jinja/web/package.json.jinja2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{
22
"name": "reflex",
3+
"type": "module",
34
"scripts": {
45
"dev": "{{ scripts.dev }}",
56
"export": "{{ scripts.export }}",
6-
"export-sitemap": "{{ scripts.export_sitemap }}",
77
"prod": "{{ scripts.prod }}"
88
},
99
"dependencies": {

reflex/.templates/jinja/web/pages/_app.js.jinja2

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ import '$/styles/__reflex_global_styles.css'
66
{% endblock %}
77

88
{% block declaration %}
9-
import { EventLoopProvider, StateProvider, defaultColorMode } from "$/utils/context.js";
10-
import { ThemeProvider } from 'next-themes'
9+
import { EventLoopProvider, StateProvider, defaultColorMode } from "$/utils/context";
10+
import { ThemeProvider } from '$/utils/react-theme';
11+
import { Layout as AppLayout } from './_document';
12+
import { Outlet } from 'react-router';
1113
{% for library_alias, library_path in window_libraries %}
1214
import * as {{library_alias}} from "{{library_path}}";
1315
{% endfor %}
@@ -26,8 +28,9 @@ function AppWrap({children}) {
2628
)
2729
}
2830

29-
export default function MyApp({ Component, pageProps }) {
30-
React.useEffect(() => {
31+
32+
export function Layout({children}) {
33+
React.useEffect(() => {
3134
// Make contexts and state objects available globally for dynamic eval'd components
3235
let windowImports = {
3336
{% for library_alias, library_path in window_libraries %}
@@ -36,17 +39,20 @@ export default function MyApp({ Component, pageProps }) {
3639
};
3740
window["__reflex"] = windowImports;
3841
}, []);
39-
return (
40-
jsx(ThemeProvider, {defaultTheme:defaultColorMode,attribute:"class"},
42+
43+
return jsx(AppLayout, {},
44+
jsx(ThemeProvider, {defaultTheme: defaultColorMode, attribute: "class"},
4145
jsx(StateProvider, {},
42-
jsx(EventLoopProvider, {},
43-
jsx(AppWrap, {},
44-
jsx(Component, pageProps)
45-
)
46+
jsx(EventLoopProvider, {},
47+
jsx(AppWrap, {}, children)
4648
)
4749
)
4850
)
4951
);
5052
}
5153

54+
export default function App() {
55+
return jsx(Outlet, {});
56+
}
57+
5258
{% endblock %}

reflex/.templates/jinja/web/pages/_document.js.jinja2

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{% extends "web/pages/base_page.js.jinja2" %}
22

33
{% block export %}
4-
export default function Document() {
4+
export function Layout({children}) {
55
return (
66
{{utils.render(document)}}
77
)

reflex/.templates/jinja/web/pages/base_page.js.jinja2

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
{% import 'web/pages/utils.js.jinja2' as utils %}
2-
/** @jsxImportSource @emotion/react */
32

43
{% block early_imports %}
54
{% endblock %}

reflex/.templates/jinja/web/utils/context.js.jinja2

Lines changed: 25 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import { createContext, useContext, useMemo, useReducer, useState, createElement } from "react"
2-
import { applyDelta, Event, hydrateClientStorage, useEventLoop, refs } from "$/utils/state.js"
1+
import { createContext, useContext, useMemo, useReducer, useState, createElement, useEffect } from "react"
2+
import { applyDelta, Event, hydrateClientStorage, useEventLoop, refs } from "$/utils/state"
3+
import { jsx } from "@emotion/react";
34

45
{% if initial_state %}
56
export const initialState = {{ initial_state|json_dumps }}
@@ -77,7 +78,21 @@ export function UploadFilesProvider({ children }) {
7778
delete newFilesById[id]
7879
return newFilesById
7980
})
80-
return createElement(UploadFilesContext, {value:[filesById, setFilesById]}, children);
81+
return createElement(
82+
UploadFilesContext.Provider,
83+
{ value: [filesById, setFilesById] },
84+
children
85+
);
86+
}
87+
88+
export function ClientSide(component) {
89+
return ({ children, ...props }) => {
90+
const [Component, setComponent] = useState(null);
91+
useEffect(() => {
92+
setComponent(component);
93+
}, []);
94+
return Component ? jsx(Component, props, children) : null;
95+
};
8196
}
8297

8398
export function EventLoopProvider({ children }) {
@@ -87,7 +102,11 @@ export function EventLoopProvider({ children }) {
87102
initialEvents,
88103
clientStorage,
89104
)
90-
return createElement(EventLoopContext, {value:[addEvents, connectErrors]}, children);
105+
return createElement(
106+
EventLoopContext.Provider,
107+
{ value: [addEvents, connectErrors] },
108+
children
109+
);
91110
}
92111

93112
export function StateProvider({ children }) {
@@ -106,7 +125,7 @@ export function StateProvider({ children }) {
106125
{% for state_name in initial_state %}
107126
createElement(StateContexts.{{state_name|var_name}},{value: {{state_name|var_name}}},
108127
{% endfor %}
109-
createElement(DispatchContext.Provider, {value: dispatchers}, children),
110-
{% for state_name in initial_state|reverse %}){% endfor %}
128+
createElement(DispatchContext, {value: dispatchers}, children)
129+
{% for state_name in initial_state %}){% endfor %}
111130
)
112131
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { startTransition } from "react";
2+
import { hydrateRoot } from "react-dom/client";
3+
import { HydratedRouter } from "react-router/dom";
4+
import { createElement } from "react";
5+
6+
startTransition(() => {
7+
hydrateRoot(document, createElement(HydratedRouter));
8+
});

0 commit comments

Comments
 (0)