Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
2c8d798
chore: upgrade storybook (minor)
kazettique Nov 3, 2025
678e027
chore: storybook migration (v8 to v9)
kazettique Nov 3, 2025
927e93d
chore: storybook migration (v9 to v10)
kazettique Nov 3, 2025
095e647
fix: type error
kazettique Nov 4, 2025
52b8e08
chore: upgrade ant-design and fix test
kazettique Nov 4, 2025
3ad4457
chore: upgrade storybook
kazettique Nov 4, 2025
237d647
chore: upgrade packages
kazettique Nov 4, 2025
bd43881
chore: upgrade storybook
kazettique Nov 4, 2025
cf50628
chore: upgrade test packages
kazettique Nov 5, 2025
af0797a
chore: upgrade dev packages
kazettique Nov 5, 2025
5abb0e4
chore: upgrade packages
kazettique Nov 5, 2025
a2d4646
chore: upgrade rc components
kazettique Nov 5, 2025
d4424c7
chore: upgrade packages
kazettique Nov 5, 2025
8fa7682
chore: upgrade react-router-dom (minor)
kazettique Nov 5, 2025
341b544
chore: react-router-dom migration prepare
kazettique Nov 5, 2025
9da3251
chore: upgrade react-router-dom (major)
kazettique Nov 6, 2025
da88c92
fix: antd warning messages
kazettique Nov 7, 2025
f8cb73c
chore: upgrade vite
kazettique Nov 7, 2025
ad6a222
chore: upgrade storybook
kazettique Nov 7, 2025
69d1fac
chore: upgrade jsdom
kazettique Nov 7, 2025
8111410
chore: upgrade dayjs
kazettique Nov 7, 2025
9bf90ab
chore: upgrade i18next
kazettique Nov 7, 2025
37f5bcd
chore: upgrade pro components
kazettique Nov 7, 2025
94bba94
chore: downgrade dayjs
kazettique Nov 7, 2025
9752c8e
chore: upgrade packages
kazettique Nov 7, 2025
85d84f4
chore: upgrade aws-amplify (patch)
kazettique Nov 7, 2025
0dd463c
chore: migrate aws-amplify (v5 to v6)
kazettique Nov 7, 2025
b00c052
chore: migrate firebase (v10 to v12)
kazettique Nov 7, 2025
f251dd0
chore: upgrade cesium
kazettique Nov 7, 2025
3f6fe50
chore: upgrade storybook (patch)
kazettique Nov 9, 2025
2bec3b9
Merge branch 'main' into chore-web/upgrade-other-packages-2
kazettique Nov 10, 2025
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
9 changes: 1 addition & 8 deletions web/.storybook/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,10 @@ import type { StorybookConfig } from "@storybook/react-vite";

const config: StorybookConfig = {
stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|ts|tsx)"],
addons: [
"@storybook/addon-links",
"@storybook/addon-essentials",
"@storybook/addon-interactions",
],
addons: ["@storybook/addon-links"],
framework: {
name: "@storybook/react-vite",
options: {},
},
docs: {
autodocs: "tag",
},
};
export default config;
4 changes: 4 additions & 0 deletions web/e2e/pages/base.page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -147,4 +147,8 @@ export abstract class BasePage {
async keypress(key: string, delay?: number): Promise<void> {
await this.page.keyboard.press(key, { delay });
}

async keyboardType(text: string): Promise<void> {
await this.page.keyboard.type(text);
}
}
9 changes: 7 additions & 2 deletions web/e2e/pages/content.page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ export class ContentPage extends BasePage {

// Table sorting and filtering
textColumnHeader(): Locator {
return this.getByText("text", { exact: true });
return this.locator("thead").getByText("text");
}
get columnHeaderText(): Locator {
return this.getByRole("columnheader", { name: "text" });
Expand Down Expand Up @@ -464,7 +464,7 @@ export class ContentPage extends BasePage {
}

get editorContent(): Locator {
return this.getByLabel("Editor content;Press Alt+F1");
return this.locator(".monaco-editor");
}

// Table column selection
Expand Down Expand Up @@ -701,4 +701,9 @@ export class ContentPage extends BasePage {
const url = this.page.url();
return url.split("/").at(-1) as string;
}

async fillEditorContent(text: string): Promise<void> {
await this.editorContent.click();
await this.keyboardType(text);
}
}
9 changes: 7 additions & 2 deletions web/e2e/pages/field-editor.page.ts
Original file line number Diff line number Diff line change
Expand Up @@ -379,8 +379,8 @@ export class FieldEditorPage extends BasePage {
return this.locator(".view-lines");
}

get editorContent(): Locator {
return this.getByLabel("Editor content;Press Alt+F1");
editorContent(index = 0): Locator {
return this.locator(".monaco-editor").nth(index);
}

// Delete field button
Expand Down Expand Up @@ -494,4 +494,9 @@ export class FieldEditorPage extends BasePage {
await this.okButton.click();
await this.closeNotification();
}

async fillEditorContent(text: string, index?: number): Promise<void> {
await this.editorContent(index).click();
await this.keyboardType(text);
}
}
14 changes: 9 additions & 5 deletions web/e2e/tests/project/items/fields/geometryObject.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ test("GeometryObject field creating and updating has succeeded", async ({
fieldEditorPage,
contentPage,
}) => {
test.slow();
await fieldEditorPage.fieldTypeButton("Geometry Object").click();
await fieldEditorPage.displayNameInput.click();
await fieldEditorPage.displayNameInput.fill("geometryObject1");
Expand All @@ -34,7 +35,7 @@ test("GeometryObject field creating and updating has succeeded", async ({
await expect(contentPage.labelElement()).toContainText("geometryObject1");
await expect(contentPage.mainElement).toContainText("geometryObject1 description");
await contentPage.viewLinesEditor.click();
await contentPage.editorContent.fill('{\n"type": "Point",\n"coordinates": [0, 0]');
await contentPage.fillEditorContent('{\n"type": "Point",\n"coordinates": [0, 0]');
await contentPage.saveButton.click();
await contentPage.closeNotification();
await contentPage.backButton.click();
Expand All @@ -44,7 +45,7 @@ test("GeometryObject field creating and updating has succeeded", async ({
await contentPage.editButton.click();
await contentPage.antRowButton(1).click();
await contentPage.viewLinesEditor.click();
await contentPage.editorContent.fill('{\n"type": "Point",\n"coordinates": [1, 0]');
await contentPage.fillEditorContent('{\n"type": "Point",\n"coordinates": [1, 0]');
await contentPage.saveButton.click();
await contentPage.closeNotification();
await contentPage.backButton.click();
Expand All @@ -57,6 +58,7 @@ test("GeometryObject field editing has succeeded", async ({
contentPage,
schemaPage,
}) => {
test.slow();
await fieldEditorPage.fieldTypeListItem("Geometry Object").click();
await fieldEditorPage.displayNameInput.click();
await fieldEditorPage.displayNameInput.fill("geometryObject1");
Expand All @@ -65,7 +67,9 @@ test("GeometryObject field editing has succeeded", async ({
await fieldEditorPage.pointCheckbox.check();
await fieldEditorPage.defaultValueTab.click();
await fieldEditorPage.viewLinesEditor.click();
await fieldEditorPage.editorContent.fill('{\n"type": "Point",\n"coordinates": [0, 0]');

await fieldEditorPage.fillEditorContent('{\n"type": "Point",\n"coordinates": [0, 0]');

await fieldEditorPage.okButton.click();
await fieldEditorPage.closeNotification();
await contentPage.contentText.click();
Expand Down Expand Up @@ -99,7 +103,7 @@ test("GeometryObject field editing has succeeded", async ({
);

await fieldEditorPage.plusNewButton.click();
await fieldEditorPage.editorContent.nth(1).fill('{\n"type": "Point",\n"coordinates": [1, 0]');
await fieldEditorPage.fillEditorContent('{\n"type": "Point",\n"coordinates": [1, 0]', 1);
await fieldEditorPage.firstArrowDownButton.click();
await expect(fieldEditorPage.viewLinesEditor.nth(0)).toContainText(
'{ "type": "Point", "coordinates": [1, 0]}',
Expand All @@ -124,7 +128,7 @@ test("GeometryObject field editing has succeeded", async ({
'{ "type": "Point", "coordinates": [0, 0]}',
);
await fieldEditorPage.plusNewButton.click();
await contentPage.editorContent.nth(2).fill('{\n"type": "Point",\n"coordinates": [2, 0]');
await fieldEditorPage.fillEditorContent('{\n"type": "Point",\n"coordinates": [2, 0]', 2);
await fieldEditorPage.arrowUpButtonByIndex(2).click();
await contentPage.saveButton.click();
await contentPage.closeNotification();
Expand Down
2 changes: 1 addition & 1 deletion web/e2e/tests/project/items/fields/reference.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -281,7 +281,7 @@ test("Two-way reference field editing has succeeded", async ({
await expect(contentPage.cellByTextExact("text1").locator("span").first()).toBeVisible();
await expect(contentPage.cellByTextExact("text2").locator("span").first()).toBeVisible();
await contentPage.editButton.first().click();
await fieldEditorPage.referToItemButton.click();
await fieldEditorPage.replaceItemButton.click();
await fieldEditorPage.rowButton(0).hover();
await fieldEditorPage.rowButton(0).click();
await fieldEditorPage.okButton.click();
Expand Down
132 changes: 64 additions & 68 deletions web/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,117 +30,113 @@
"build-storybook": "storybook build"
},
"devDependencies": {
"@emotion/jest": "11.13.0",
"@emotion/jest": "11.14.2",
"@graphql-codegen/cli": "5.0.2",
"@graphql-codegen/fragment-matcher": "5.0.2",
"@graphql-codegen/introspection": "4.0.3",
"@graphql-codegen/typescript": "4.0.9",
"@graphql-codegen/typescript-operations": "4.2.3",
"@graphql-codegen/typescript-react-apollo": "4.3.0",
"@mapbox/vector-tile": "2.0.3",
"@playwright/test": "1.56.0",
"@mapbox/vector-tile": "2.0.4",
"@playwright/test": "1.56.1",
"@rollup/plugin-yaml": "4.1.2",
"@storybook/addon-essentials": "8.2.9",
"@storybook/addon-interactions": "8.2.9",
"@storybook/addon-links": "8.2.9",
"@storybook/blocks": "8.2.9",
"@storybook/react": "8.2.9",
"@storybook/react-vite": "8.2.9",
"@storybook/addon-links": "10.0.6",
"@storybook/react": "10.0.6",
"@storybook/react-vite": "10.0.6",
"@storybook/testing-library": "0.2.2",
"@testing-library/jest-dom": "6.5.0",
"@testing-library/react": "16.0.1",
"@testing-library/jest-dom": "6.9.1",
"@testing-library/react": "16.3.0",
"@testing-library/react-hooks": "8.0.1",
"@testing-library/user-event": "14.5.2",
"@testing-library/user-event": "14.6.1",
"@types/apollo-upload-client": "18.0.0",
"@types/file-saver": "2.0.7",
"@types/js-md5": "0.7.2",
"@types/mapbox__vector-tile": "1.3.4",
"@types/node": "22.5.1",
"@types/js-md5": "0.8.0",
"@types/mapbox__vector-tile": "2.0.0",
"@types/node": "24.10.0",
"@types/object-hash": "3.0.6",
"@types/react": "18.3.4",
"@types/react-dom": "18.3.0",
"@types/react": "18.3.26",
"@types/react-dom": "18.3.7",
"@types/react-resizable": "3.0.8",
"@types/react-router-dom": "5.3.3",
"@vitejs/plugin-react": "4.3.1",
"@vitest/coverage-v8": "2.1.9",
"axios": "1.8.2",
"dotenv": "16.4.5",
"eslint": "9.37.0",
"@vitejs/plugin-react": "5.1.0",
"@vitest/coverage-v8": "4.0.7",
"axios": "1.13.2",
"dotenv": "17.2.3",
"eslint": "9.39.1",
"eslint-config-reearth": "0.3.8",
"eslint-plugin-playwright": "2.2.2",
"eslint-plugin-storybook": "0.12.0",
"globals": "15.9.0",
"google-auth-library": "10.4.1",
"i18next-parser": "9.0.2",
"jest": "29.7.0",
"jsdom": "25.0.0",
"less": "4.2.0",
"msw": "2.4.1",
"eslint-plugin-playwright": "2.3.0",
"eslint-plugin-storybook": "10.0.6",
"globals": "16.5.0",
"google-auth-library": "10.5.0",
"i18next-parser": "9.3.0",
"jest": "30.2.0",
"jsdom": "26.1.0",
"less": "4.4.2",
"msw": "2.12.0",
"npm-run-all": "4.1.5",
"prettier": "3.6.2",
"prop-types": "15.8.1",
"read-env": "2.0.0",
"storybook": "8.2.9",
"storybook": "10.0.6",
"ts-node": "10.9.2",
"typescript": "5.7.3",
"vite": "5.4.19",
"typescript": "5.9.3",
"vite": "7.2.2",
"vite-plugin-cesium": "1.2.23",
"vite-tsconfig-paths": "5.1.4",
"vitest": "2.1.9",
"vitest": "4.0.7",
"yaml": "2.8.1",
"zod": "4.1.8"
"zod": "4.1.12"
},
"dependencies": {
"@ant-design/compatible": "5.1.3",
"@ant-design/cssinjs": "1.21.1",
"@ant-design/icons": "5.4.0",
"@ant-design/pro-components": "2.7.15",
"@ant-design/pro-layout": "7.19.12",
"@ant-design/pro-provider": "2.14.9",
"@ant-design/compatible": "5.1.4",
"@ant-design/cssinjs": "1.24.0",
"@ant-design/icons": "6.1.0",
"@ant-design/pro-components": "2.8.10",
"@ant-design/pro-layout": "7.22.7",
"@ant-design/pro-provider": "2.16.2",
"@ant-design/pro-table": "3.16.6",
"@apollo/client": "3.11.5",
"@auth0/auth0-react": "2.2.4",
"@emotion/react": "11.13.3",
"@emotion/styled": "11.13.0",
"@monaco-editor/react": "4.6.0",
"@auth0/auth0-react": "2.8.0",
"@emotion/react": "11.14.0",
"@emotion/styled": "11.14.1",
"@monaco-editor/react": "4.7.0",
"ajv": "8.17.1",
"antd": "5.24.3",
"antd": "5.28.0",
"apollo-upload-client": "18.0.1",
"aws-amplify": "5.3.21",
"cesium": "1.129.0",
"aws-amplify": "6.15.8",
"cesium": "1.135.0",
"cesium-mvt-imagery-provider": "1.4.2",
"dayjs": "1.11.13",
"firebase": "10.13.1",
"firebase": "12.5.0",
"firebaseui": "6.1.0",
"formik": "2.4.6",
"graphiql": "3.7.1",
"graphql": "16.9.0",
"html-react-parser": "5.1.15",
"i18next": "23.14.0",
"i18next-browser-languagedetector": "8.0.0",
"jotai": "2.9.3",
"html-react-parser": "5.2.8",
"i18next": "25.6.1",
"i18next-browser-languagedetector": "8.2.0",
"jotai": "2.15.1",
"js-file-download": "0.4.12",
"js-md5": "0.8.3",
"lodash.tonumber": "4.0.3",
"mini-svg-data-uri": "1.4.4",
"monaco-editor": "0.51.0",
"monaco-editor": "0.54.0",
"object-hash": "3.0.0",
"ol": "10.1.0",
"rc-field-form": "2.4.0",
"rc-menu": "9.15.1",
"rc-table": "7.47.5",
"ol": "10.7.0",
"rc-field-form": "2.7.1",
"rc-menu": "9.16.1",
"rc-table": "7.55.1",
"react": "18.3.1",
"react-dom": "18.3.1",
"react-drag-listview": "2.0.0",
"react-i18next": "15.0.1",
"react-json-tree": "0.19.0",
"react-markdown": "9.0.1",
"react-i18next": "16.2.4",
"react-json-tree": "0.20.0",
"react-markdown": "10.1.0",
"react-resizable": "3.0.5",
"react-router-dom": "6.26.1",
"react-svg": "16.1.34",
"remark-gfm": "4.0.0",
"react-router": "7.9.5",
"react-svg": "16.3.0",
"remark-gfm": "4.0.1",
"resium": "1.18.3",
"runes2": "1.1.4",
"ulid": "2.3.0"
"ulid": "3.0.1"
}
}
}
21 changes: 14 additions & 7 deletions web/src/App.tsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,8 @@
import dayjs from "dayjs";
import relativeTime from "dayjs/plugin/relativeTime";
import utc from "dayjs/plugin/utc";
import {
Route,
RouterProvider,
createBrowserRouter,
createRoutesFromElements,
} from "react-router-dom";
import { Route, createBrowserRouter, createRoutesFromElements } from "react-router";
import { RouterProvider } from "react-router/dom";

import { AuthProvider } from "@reearth-cms/auth";
import NotFound from "@reearth-cms/components/atoms/NotFound";
Expand Down Expand Up @@ -43,7 +39,9 @@ const router = createBrowserRouter(
createRoutesFromElements(
<>
<Route index element={<RootPage />} />
<Route path="auth/*" element={<RootPage />} />
<Route path="auth" element={<RootPage />}>
<Route path="*" element={<RootPage />} />
</Route>
<Route path="workspace" element={<CMSPageWrapper />}>
<Route index element={<Workspace />} />
<Route path=":workspaceId" element={<Workspace />} />
Expand Down Expand Up @@ -89,6 +87,15 @@ const router = createBrowserRouter(
<Route path="*" element={<NotFound />} />
</>,
),
{
future: {
v7_relativeSplatPath: true,
v7_fetcherPersist: true,
v7_normalizeFormMethod: true,
v7_partialHydration: true,
v7_skipActionErrorRevalidation: true,
},
},
);

function App() {
Expand Down
Loading
Loading