Compare commits

...

846 Commits
master ... main

Author SHA1 Message Date
32e2abdd6e upd workflow2 2025-08-13 23:03:07 +05:00
fb35acdb20 upd workflow 2025-08-13 22:50:12 +05:00
dependabot[bot]
8afaae2dca
Bump vite from 7.1.1 to 7.1.2 (#760)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.1.1 to 7.1.2.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.1.2/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 7.1.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-12 08:48:07 +01:00
dependabot[bot]
2569a346ca
Bump @types/react from 19.1.9 to 19.1.10 (#758)
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.1.9 to 19.1.10.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-version: 19.1.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-12 08:42:32 +01:00
dependabot[bot]
cb6b73079e
Bump @mui/icons-material from 7.2.0 to 7.3.1 (#757)
Bumps [@mui/icons-material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-icons-material) from 7.2.0 to 7.3.1.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v7.3.1/packages/mui-icons-material)

---
updated-dependencies:
- dependency-name: "@mui/icons-material"
  dependency-version: 7.3.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-12 08:41:23 +01:00
dependabot[bot]
fc85f447b6
Bump typescript-eslint from 8.38.0 to 8.39.1 (#756)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.38.0 to 8.39.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.39.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.39.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-12 08:41:08 +01:00
dependabot[bot]
309df5a83a
Bump eslint-plugin-prettier from 5.5.3 to 5.5.4 (#753)
Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.5.3 to 5.5.4.
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.5.3...v5.5.4)

---
updated-dependencies:
- dependency-name: eslint-plugin-prettier
  dependency-version: 5.5.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-12 08:40:53 +01:00
dependabot[bot]
76d2b8bf44
Bump @tanstack/react-query from 5.84.1 to 5.84.2 (#751)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.84.1 to 5.84.2.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.84.2/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-version: 5.84.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-12 08:38:28 +01:00
dependabot[bot]
c5b2a17a3f
Bump @mui/material from 7.2.0 to 7.3.1 (#748)
Bumps [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) from 7.2.0 to 7.3.1.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v7.3.1/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-version: 7.3.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-12 08:19:58 +01:00
dependabot[bot]
388eaf4516
Bump @types/node from 24.1.0 to 24.2.1 (#747)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 24.1.0 to 24.2.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.2.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-12 08:19:41 +01:00
dependabot[bot]
ad69afdef3
Bump ts-jest-mock-import-meta from 1.3.0 to 1.3.1 (#746)
Bumps [ts-jest-mock-import-meta](https://github.com/ThomZz/ts-jest-mock-import-meta) from 1.3.0 to 1.3.1.
- [Release notes](https://github.com/ThomZz/ts-jest-mock-import-meta/releases)
- [Commits](https://github.com/ThomZz/ts-jest-mock-import-meta/compare/v1.3.0...v1.3.1)

---
updated-dependencies:
- dependency-name: ts-jest-mock-import-meta
  dependency-version: 1.3.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-12 08:19:24 +01:00
dependabot[bot]
f077bef812
Bump eslint from 9.32.0 to 9.33.0 (#745)
Bumps [eslint](https://github.com/eslint/eslint) from 9.32.0 to 9.33.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.32.0...v9.33.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.33.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-12 08:17:06 +01:00
dependabot[bot]
3c82873568
Bump react-router-dom from 7.7.1 to 7.8.0 (#744)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 7.7.1 to 7.8.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.8.0/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-version: 7.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-12 08:15:44 +01:00
dependabot[bot]
fcc6384500
Bump @vitejs/plugin-react from 4.7.0 to 5.0.0 (#743)
Bumps [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) from 4.7.0 to 5.0.0.
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@5.0.0/packages/plugin-react)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-react"
  dependency-version: 5.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-12 08:15:07 +01:00
dependabot[bot]
93b964d911
Bump vite from 7.0.6 to 7.1.1 (#742)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.0.6 to 7.1.1.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.1.1/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 7.1.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-12 08:12:35 +01:00
dependabot[bot]
07e6d9def8
Bump actions/download-artifact from 4 to 5 (#741)
Bumps [actions/download-artifact](https://github.com/actions/download-artifact) from 4 to 5.
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/download-artifact
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-12 08:12:14 +01:00
dependabot[bot]
b45dc08482
Bump docker/login-action from 3.4.0 to 3.5.0 (#740)
Bumps [docker/login-action](https://github.com/docker/login-action) from 3.4.0 to 3.5.0.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](74a5d14239...184bdaa072)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: 3.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-12 08:11:40 +01:00
Borislav Pantaleev
7626c150ed
Fix jest tests by transforming also node_modules files (#739) 2025-08-05 08:37:18 +01:00
dependabot[bot]
5b4a638f12
Bump ts-jest from 29.4.0 to 29.4.1 (#732)
Bumps [ts-jest](https://github.com/kulshekhar/ts-jest) from 29.4.0 to 29.4.1.
- [Release notes](https://github.com/kulshekhar/ts-jest/releases)
- [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/kulshekhar/ts-jest/compare/v29.4.0...v29.4.1)

---
updated-dependencies:
- dependency-name: ts-jest
  dependency-version: 29.4.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-04 13:08:56 +01:00
dependabot[bot]
7cafde91aa
Bump @types/react from 19.1.8 to 19.1.9 (#734)
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.1.8 to 19.1.9.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-version: 19.1.9
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-04 12:39:30 +01:00
dependabot[bot]
2811e8dacb
Bump react-test-renderer from 19.1.0 to 19.1.1 (#735)
Bumps [react-test-renderer](https://github.com/facebook/react/tree/HEAD/packages/react-test-renderer) from 19.1.0 to 19.1.1.
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.1.1/packages/react-test-renderer)

---
updated-dependencies:
- dependency-name: react-test-renderer
  dependency-version: 19.1.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-04 12:39:19 +01:00
dependabot[bot]
354a37aaf7
Bump docker/metadata-action from 5.7.0 to 5.8.0 (#736)
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 5.7.0 to 5.8.0.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Commits](902fa8ec7d...c1e51972af)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-version: 5.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-04 12:39:05 +01:00
dependabot[bot]
bb001add3b
Bump @tanstack/react-query from 5.83.0 to 5.84.1 (#738)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.83.0 to 5.84.1.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.84.1/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-version: 5.84.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-04 12:38:53 +01:00
dependabot[bot]
7a63e0a123
Bump ra-language-french from 5.10.0 to 5.10.1 (#737)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.10.0 to 5.10.1.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.10.0...v5.10.1)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-version: 5.10.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-04 12:38:39 +01:00
dependabot[bot]
6b5ef04ade
Bump react-hook-form from 7.61.1 to 7.62.0 (#733)
Bumps [react-hook-form](https://github.com/react-hook-form/react-hook-form) from 7.61.1 to 7.62.0.
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.61.1...v7.62.0)

---
updated-dependencies:
- dependency-name: react-hook-form
  dependency-version: 7.62.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-04 12:38:28 +01:00
dependabot[bot]
443dae6e15
Bump react-admin from 5.10.0 to 5.10.1 (#729)
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.10.0 to 5.10.1.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.10.0...v5.10.1)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-version: 5.10.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-08-04 12:38:12 +01:00
Aine
dd2389f877
fix deps 2025-07-28 20:52:41 +01:00
dependabot[bot]
dd62bbbbb2
Bump react from 19.1.0 to 19.1.1 (#725)
Bumps [react](https://github.com/facebook/react/tree/HEAD/packages/react) from 19.1.0 to 19.1.1.
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.1.1/packages/react)

---
updated-dependencies:
- dependency-name: react
  dependency-version: 19.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 20:47:06 +01:00
dependabot[bot]
ae521fa55d
Bump react-is from 19.1.0 to 19.1.1 (#726)
Bumps [react-is](https://github.com/facebook/react/tree/HEAD/packages/react-is) from 19.1.0 to 19.1.1.
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.1.1/packages/react-is)

---
updated-dependencies:
- dependency-name: react-is
  dependency-version: 19.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 20:46:51 +01:00
dependabot[bot]
d62530b2ab
Bump eslint-config-prettier from 10.1.5 to 10.1.8 (#703)
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 10.1.5 to 10.1.8.
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v10.1.5...v10.1.8)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-version: 10.1.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 20:21:21 +01:00
dependabot[bot]
09abb12d39
Bump jest from 30.0.4 to 30.0.5 (#709)
Bumps [jest](https://github.com/jestjs/jest/tree/HEAD/packages/jest) from 30.0.4 to 30.0.5.
- [Release notes](https://github.com/jestjs/jest/releases)
- [Changelog](https://github.com/jestjs/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jestjs/jest/commits/v30.0.5/packages/jest)

---
updated-dependencies:
- dependency-name: jest
  dependency-version: 30.0.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 20:21:09 +01:00
dependabot[bot]
4ae0d3f86e
Bump @testing-library/dom from 10.4.0 to 10.4.1 (#705)
Bumps [@testing-library/dom](https://github.com/testing-library/dom-testing-library) from 10.4.0 to 10.4.1.
- [Release notes](https://github.com/testing-library/dom-testing-library/releases)
- [Changelog](https://github.com/testing-library/dom-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/dom-testing-library/compare/v10.4.0...v10.4.1)

---
updated-dependencies:
- dependency-name: "@testing-library/dom"
  dependency-version: 10.4.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 20:12:38 +01:00
dependabot[bot]
5b4ee7e23b
Bump jest-environment-jsdom from 30.0.4 to 30.0.5 (#706)
Bumps [jest-environment-jsdom](https://github.com/jestjs/jest/tree/HEAD/packages/jest-environment-jsdom) from 30.0.4 to 30.0.5.
- [Release notes](https://github.com/jestjs/jest/releases)
- [Changelog](https://github.com/jestjs/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jestjs/jest/commits/v30.0.5/packages/jest-environment-jsdom)

---
updated-dependencies:
- dependency-name: jest-environment-jsdom
  dependency-version: 30.0.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 20:12:24 +01:00
dependabot[bot]
0f6958dcfe
Bump eslint from 9.31.0 to 9.32.0 (#711)
Bumps [eslint](https://github.com/eslint/eslint) from 9.31.0 to 9.32.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.31.0...v9.32.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.32.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 20:11:59 +01:00
dependabot[bot]
2b0fad626a
Bump react-hook-form from 7.60.0 to 7.61.1 (#710)
Bumps [react-hook-form](https://github.com/react-hook-form/react-hook-form) from 7.60.0 to 7.61.1.
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.60.0...v7.61.1)

---
updated-dependencies:
- dependency-name: react-hook-form
  dependency-version: 7.61.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 19:27:04 +01:00
dependabot[bot]
2050d59fd7
Bump @vitejs/plugin-react from 4.6.0 to 4.7.0 (#712)
Bumps [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) from 4.6.0 to 4.7.0.
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@4.7.0/packages/plugin-react)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-react"
  dependency-version: 4.7.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 19:26:43 +01:00
dependabot[bot]
431f2e2600
Bump eslint-plugin-prettier from 5.5.1 to 5.5.3 (#715)
Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.5.1 to 5.5.3.
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.5.1...v5.5.3)

---
updated-dependencies:
- dependency-name: eslint-plugin-prettier
  dependency-version: 5.5.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 19:26:27 +01:00
dependabot[bot]
b8599f046b
Bump @testing-library/jest-dom from 6.6.3 to 6.6.4 (#716)
Bumps [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) from 6.6.3 to 6.6.4.
- [Release notes](https://github.com/testing-library/jest-dom/releases)
- [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/jest-dom/compare/v6.6.3...v6.6.4)

---
updated-dependencies:
- dependency-name: "@testing-library/jest-dom"
  dependency-version: 6.6.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 19:26:11 +01:00
dependabot[bot]
cb33f6df96
Bump @eslint/js from 9.31.0 to 9.32.0 (#717)
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.31.0 to 9.32.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.32.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.32.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 19:25:56 +01:00
dependabot[bot]
82673a5d32
Bump @types/node from 24.0.13 to 24.1.0 (#718)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 24.0.13 to 24.1.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 19:25:43 +01:00
dependabot[bot]
2ff2813f81
Bump typescript-eslint from 8.37.0 to 8.38.0 (#719)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.37.0 to 8.38.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.38.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.38.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 19:25:29 +01:00
dependabot[bot]
c0718d2eb8
Bump @bicstone/ra-language-japanese from 5.7.0 to 5.10.0 (#714)
Bumps [@bicstone/ra-language-japanese](https://github.com/bicstone/ra-language-japanese) from 5.7.0 to 5.10.0.
- [Release notes](https://github.com/bicstone/ra-language-japanese/releases)
- [Commits](https://github.com/bicstone/ra-language-japanese/commits)

---
updated-dependencies:
- dependency-name: "@bicstone/ra-language-japanese"
  dependency-version: 5.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 19:17:02 +01:00
dependabot[bot]
d2d8102898
Bump ra-language-french from 5.9.1 to 5.10.0 (#702)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.9.1 to 5.10.0.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.9.1...v5.10.0)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-version: 5.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 19:14:01 +01:00
dependabot[bot]
91dd7db948
Bump react-router-dom from 7.6.3 to 7.7.1 (#722)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 7.6.3 to 7.7.1.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.7.1/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-version: 7.7.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 19:13:38 +01:00
dependabot[bot]
3ba6057297
Bump vite from 7.0.4 to 7.0.6 (#720)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 7.0.4 to 7.0.6.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v7.0.6/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 7.0.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 19:13:18 +01:00
dependabot[bot]
0b4ec2627f
Bump react-admin from 5.9.1 to 5.10.0 (#713)
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.9.1 to 5.10.0.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.9.1...v5.10.0)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-version: 5.10.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-28 19:12:38 +01:00
Aine
51a8eb2250
correctly set document language based on the selected locale, fixes #723 2025-07-28 19:08:11 +01:00
dependabot[bot]
3611ee5973
Bump typescript-eslint from 8.36.0 to 8.37.0 (#698)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.36.0 to 8.37.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.37.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.37.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-14 23:42:10 +01:00
dependabot[bot]
49d10d8d5f
Bump @typescript-eslint/parser from 8.36.0 to 8.37.0 (#697)
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 8.36.0 to 8.37.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.37.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-version: 8.37.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-14 23:37:14 +01:00
dependabot[bot]
bf742aaf70
Bump @tanstack/react-query from 5.81.5 to 5.83.0 (#692)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.81.5 to 5.83.0.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.83.0/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-version: 5.83.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-14 23:01:52 +01:00
dependabot[bot]
a4e7f03b84
Bump eslint from 9.30.1 to 9.31.0 (#693)
Bumps [eslint](https://github.com/eslint/eslint) from 9.30.1 to 9.31.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.30.1...v9.31.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.31.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-14 23:01:37 +01:00
dependabot[bot]
ea9579db68
Bump @bicstone/ra-language-japanese from 5.6.3 to 5.7.0 (#695)
Bumps [@bicstone/ra-language-japanese](https://github.com/bicstone/ra-language-japanese) from 5.6.3 to 5.7.0.
- [Release notes](https://github.com/bicstone/ra-language-japanese/releases)
- [Commits](https://github.com/bicstone/ra-language-japanese/compare/v5.6.3...v5.7.0)

---
updated-dependencies:
- dependency-name: "@bicstone/ra-language-japanese"
  dependency-version: 5.7.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-14 23:01:18 +01:00
dependabot[bot]
10468ea58b
Bump typescript-eslint from 8.35.1 to 8.36.0 (#696)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.35.1 to 8.36.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.36.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.36.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-14 23:01:08 +01:00
Aine
cd5251232c
add a note about updating billing details 2025-07-13 21:43:40 +01:00
Borislav Pantaleev
e0c880fb43
Add billing page with payment history and invoice download (#691)
* Add billing page with payment history and invoice download

- Add new BillingPage component with MUI table for payment display
- Add billing menu item to AdminLayout with Payment icon
- Add getPayments and getInvoice methods to dataProvider
- Implement invoice download functionality with proper error handling
- Add routing for /billing path
- Support for scheduler/{hash}/payments API endpoint
- Enhanced error handling for 500, 404, 401, 403 HTTP errors
- Loading states and user feedback for better UX

* update readme; add docs; small visual changes; make it fail on payments API errors
2025-07-13 00:21:47 +01:00
dependabot[bot]
8c427e2988
Bump jest from 30.0.3 to 30.0.4 (#676)
---
updated-dependencies:
- dependency-name: jest
  dependency-version: 30.0.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-12 22:37:56 +01:00
dependabot[bot]
b7f6da5aa0
Bump @eslint/js from 9.30.0 to 9.30.1 (#677)
---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.30.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-12 22:37:42 +01:00
dependabot[bot]
7d3e0cd9cd
Bump vite from 7.0.0 to 7.0.2 (#678)
---
updated-dependencies:
- dependency-name: vite
  dependency-version: 7.0.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-12 22:37:26 +01:00
dependabot[bot]
c0ae4b60aa
Bump @mui/icons-material from 7.1.2 to 7.2.0 (#679)
---
updated-dependencies:
- dependency-name: "@mui/icons-material"
  dependency-version: 7.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-12 22:37:13 +01:00
dependabot[bot]
4aad198612
Bump @types/node from 24.0.7 to 24.0.10 (#683)
---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.0.10
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-12 22:36:52 +01:00
dependabot[bot]
038d9614ee
Bump react-hook-form from 7.59.0 to 7.60.0 (#682)
---
updated-dependencies:
- dependency-name: react-hook-form
  dependency-version: 7.60.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-12 22:36:31 +01:00
dependabot[bot]
5ab65f1f3a
Bump @types/lodash from 4.17.19 to 4.17.20 (#685)
---
updated-dependencies:
- dependency-name: "@types/lodash"
  dependency-version: 4.17.20
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-12 22:34:58 +01:00
dependabot[bot]
903f54d2bb
Bump eslint from 9.30.0 to 9.30.1 (#686)
---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.30.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-12 22:34:29 +01:00
dependabot[bot]
451c2d8feb
Bump jest-environment-jsdom from 30.0.2 to 30.0.4 (#687)
---
updated-dependencies:
- dependency-name: jest-environment-jsdom
  dependency-version: 30.0.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-12 22:34:10 +01:00
dependabot[bot]
68696c7d20
Bump ra-language-french from 5.9.0 to 5.9.1 (#688)
---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-version: 5.9.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-12 22:33:55 +01:00
dependabot[bot]
3cfefebb44
Bump react-admin from 5.9.0 to 5.9.1 (#689)
---
updated-dependencies:
- dependency-name: react-admin
  dependency-version: 5.9.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-07-12 22:33:37 +01:00
dependabot[bot]
7e695a3b2c
Bump vite from 6.3.5 to 7.0.0 (#669)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.3.5 to 7.0.0.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/create-vite@7.0.0/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 7.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 22:48:50 +03:00
dependabot[bot]
3fb50189bc
Bump @mui/material from 7.1.2 to 7.2.0 (#672)
Bumps [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) from 7.1.2 to 7.2.0.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v7.2.0/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-version: 7.2.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 22:41:27 +03:00
dependabot[bot]
4691c5d48c
Bump typescript-eslint from 8.35.0 to 8.35.1 (#673)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.35.0 to 8.35.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.35.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.35.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 22:40:48 +03:00
dependabot[bot]
cbef6e70b8
Bump @types/node from 24.0.3 to 24.0.7 (#651)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 24.0.3 to 24.0.7.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.0.7
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 22:16:51 +03:00
dependabot[bot]
e0fd78eb8c
Bump react-hook-form from 7.58.1 to 7.59.0 (#657)
---
updated-dependencies:
- dependency-name: react-hook-form
  dependency-version: 7.59.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 22:12:22 +03:00
dependabot[bot]
c092e5b150
Bump @mui/icons-material from 7.1.1 to 7.1.2 (#664)
---
updated-dependencies:
- dependency-name: "@mui/icons-material"
  dependency-version: 7.1.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 22:11:52 +03:00
dependabot[bot]
a8f39c2cc1
Bump @emotion/styled from 11.14.0 to 11.14.1 (#655)
Bumps [@emotion/styled](https://github.com/emotion-js/emotion) from 11.14.0 to 11.14.1.
- [Release notes](https://github.com/emotion-js/emotion/releases)
- [Changelog](https://github.com/emotion-js/emotion/blob/main/CHANGELOG.md)
- [Commits](https://github.com/emotion-js/emotion/compare/@emotion/styled@11.14.0...@emotion/styled@11.14.1)

---
updated-dependencies:
- dependency-name: "@emotion/styled"
  dependency-version: 11.14.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 22:11:35 +03:00
dependabot[bot]
32c912d982
Bump react-router-dom from 7.6.2 to 7.6.3 (#671)
---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-version: 7.6.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 22:11:05 +03:00
dependabot[bot]
22118c5808
Bump eslint from 9.29.0 to 9.30.0 (#654)
---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.30.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 22:10:28 +03:00
dependabot[bot]
09178ca15c
Bump @tanstack/react-query from 5.81.2 to 5.81.5 (#653)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.81.2 to 5.81.5.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.81.5/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-version: 5.81.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 22:10:04 +03:00
dependabot[bot]
5a6513c218
Bump eslint-plugin-prettier from 5.5.0 to 5.5.1 (#658)
---
updated-dependencies:
- dependency-name: eslint-plugin-prettier
  dependency-version: 5.5.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 22:09:36 +03:00
dependabot[bot]
3387703482
Bump @types/lodash from 4.17.18 to 4.17.19 (#663)
---
updated-dependencies:
- dependency-name: "@types/lodash"
  dependency-version: 4.17.19
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 22:09:21 +03:00
dependabot[bot]
2ec7860ce1
Bump @eslint/js from 9.29.0 to 9.30.0 (#656)
---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.30.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 22:09:03 +03:00
dependabot[bot]
60b9f52f01
Bump ra-language-french from 5.8.4 to 5.9.0 (#659)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.8.4 to 5.9.0.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.8.4...v5.9.0)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-version: 5.9.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 22:08:51 +03:00
dependabot[bot]
aa0cad50a2
Bump prettier from 3.6.0 to 3.6.2 (#665)
---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.6.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 22:08:32 +03:00
dependabot[bot]
d5ec883f23
Bump jest from 30.0.2 to 30.0.3 (#666)
---
updated-dependencies:
- dependency-name: jest
  dependency-version: 30.0.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 22:08:07 +03:00
dependabot[bot]
6b99f9854f
Bump typescript-eslint from 8.34.1 to 8.35.0 (#667)
---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.35.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 22:07:51 +03:00
dependabot[bot]
c4369c3a2e
Bump react-admin from 5.8.4 to 5.9.0 (#668)
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.8.4 to 5.9.0.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.8.4...v5.9.0)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-version: 5.9.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-30 22:06:11 +03:00
dependabot[bot]
444e56bb5a
Bump @types/node from 24.0.1 to 24.0.3 (#634)
---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.0.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 12:34:18 +03:00
dependabot[bot]
2dc2583146
Bump @mui/material from 7.1.1 to 7.1.2 (#635)
Bumps [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) from 7.1.1 to 7.1.2.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/v7.1.2/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v7.1.2/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-version: 7.1.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 12:30:57 +03:00
dependabot[bot]
ffa966c434
Bump @types/lodash from 4.17.17 to 4.17.18 (#636)
Bumps [@types/lodash](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash) from 4.17.17 to 4.17.18.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash)

---
updated-dependencies:
- dependency-name: "@types/lodash"
  dependency-version: 4.17.18
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 12:30:41 +03:00
dependabot[bot]
7c0c9e8d0c
Bump @tanstack/react-query from 5.80.7 to 5.81.2 (#637)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.80.7 to 5.81.2.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.81.2/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-version: 5.81.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 12:28:44 +03:00
dependabot[bot]
30e522da13
Bump jest-environment-jsdom from 30.0.0 to 30.0.2 (#638)
Bumps [jest-environment-jsdom](https://github.com/jestjs/jest/tree/HEAD/packages/jest-environment-jsdom) from 30.0.0 to 30.0.2.
- [Release notes](https://github.com/jestjs/jest/releases)
- [Changelog](https://github.com/jestjs/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jestjs/jest/commits/v30.0.2/packages/jest-environment-jsdom)

---
updated-dependencies:
- dependency-name: jest-environment-jsdom
  dependency-version: 30.0.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 12:28:23 +03:00
dependabot[bot]
685eb338bb
Bump typescript-eslint from 8.34.0 to 8.34.1 (#644)
---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.34.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 12:28:07 +03:00
dependabot[bot]
f3f889d46a
Bump eslint-plugin-import from 2.31.0 to 2.32.0 (#642)
Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.31.0 to 2.32.0.
- [Release notes](https://github.com/import-js/eslint-plugin-import/releases)
- [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.31.0...v2.32.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-import
  dependency-version: 2.32.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 12:27:51 +03:00
dependabot[bot]
d791fce509
Bump @typescript-eslint/parser from 8.34.0 to 8.34.1 (#645)
---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-version: 8.34.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 12:22:02 +03:00
dependabot[bot]
72d2205d79
Bump prettier from 3.5.3 to 3.6.0 (#649)
---
updated-dependencies:
- dependency-name: prettier
  dependency-version: 3.6.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 12:21:47 +03:00
dependabot[bot]
db2814ec96
Bump eslint-plugin-prettier from 5.4.1 to 5.5.0 (#632)
Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.4.1 to 5.5.0.
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.4.1...v5.5.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-prettier
  dependency-version: 5.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 12:09:42 +03:00
dependabot[bot]
159303b6a3
Bump ra-language-french from 5.8.3 to 5.8.4 (#633)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.8.3 to 5.8.4.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.8.3...v5.8.4)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-version: 5.8.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 12:09:20 +03:00
dependabot[bot]
5ad2820e8c
Bump jest and @types/jest (#639)
Bumps [jest](https://github.com/jestjs/jest/tree/HEAD/packages/jest) and [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest). These dependencies needed to be updated together.

Updates `jest` from 29.7.0 to 30.0.2
- [Release notes](https://github.com/jestjs/jest/releases)
- [Changelog](https://github.com/jestjs/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jestjs/jest/commits/v30.0.2/packages/jest)

Updates `@types/jest` from 29.5.14 to 30.0.0
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest)

---
updated-dependencies:
- dependency-name: jest
  dependency-version: 30.0.2
  dependency-type: direct:development
  update-type: version-update:semver-major
- dependency-name: "@types/jest"
  dependency-version: 30.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 12:09:03 +03:00
dependabot[bot]
234e7c19f8
Bump docker/setup-buildx-action from 3.10.0 to 3.11.1 (#648)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3.10.0 to 3.11.1.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](b5ca514318...e468171a9d)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-version: 3.11.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 12:08:44 +03:00
dependabot[bot]
68abbc368c
Bump react-hook-form from 7.58.0 to 7.58.1 (#641)
---
updated-dependencies:
- dependency-name: react-hook-form
  dependency-version: 7.58.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 11:59:48 +03:00
dependabot[bot]
39d8f481e0
Bump @vitejs/plugin-react from 4.5.2 to 4.6.0 (#646)
Bumps [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) from 4.5.2 to 4.6.0.
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@4.6.0/packages/plugin-react)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-react"
  dependency-version: 4.6.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 11:59:29 +03:00
dependabot[bot]
7edfcfa440
Bump react-admin from 5.8.3 to 5.8.4 (#643)
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.8.3 to 5.8.4.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.8.3...v5.8.4)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-version: 5.8.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-23 11:58:58 +03:00
Aine
bad79df298
make linter happy 2025-06-18 16:36:52 +03:00
Suguru Hirahara
ef41275cf0
Fix locale settings
Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org>
2025-06-17 22:35:12 +09:00
Aine
26519b9482
minor adjustments 2025-06-17 16:26:51 +03:00
Suguru Hirahara
ddb84fc9cc
Add Japanese localization (#631)
* Update en.ts: add the copyright header

Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org>

* Copy en.ts to ja.ts for tracking

Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org>

* Add ja to App.tsx

Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org>

* Update ja.ts

Reuse 752dc7a4cf/src/i18n/en.ts

Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org>

* Add and enable ra-language-japanese

Available at https://github.com/bicstone/ra-language-japanese

Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org>

---------

Signed-off-by: Suguru Hirahara <acioustick@noreply.codeberg.org>
Co-authored-by: Suguru Hirahara <acioustick@noreply.codeberg.org>
2025-06-17 16:21:01 +03:00
Aine
752dc7a4cf
update package.json 2025-06-16 13:39:25 +03:00
dependabot[bot]
daa22f7e54
Bump eslint from 9.28.0 to 9.29.0 (#624)
Bumps [eslint](https://github.com/eslint/eslint) from 9.28.0 to 9.29.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.28.0...v9.29.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.29.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 13:06:41 +03:00
dependabot[bot]
62791a76f3
Bump jest-environment-jsdom from 29.7.0 to 30.0.0 (#622)
Bumps [jest-environment-jsdom](https://github.com/jestjs/jest/tree/HEAD/packages/jest-environment-jsdom) from 29.7.0 to 30.0.0.
- [Release notes](https://github.com/jestjs/jest/releases)
- [Changelog](https://github.com/jestjs/jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jestjs/jest/commits/v30.0.0/packages/jest-environment-jsdom)

---
updated-dependencies:
- dependency-name: jest-environment-jsdom
  dependency-version: 30.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 13:03:30 +03:00
dependabot[bot]
82ea3a553b
Bump @tanstack/react-query from 5.80.6 to 5.80.7 (#619)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.80.6 to 5.80.7.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.80.7/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-version: 5.80.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 13:00:03 +03:00
dependabot[bot]
0850ef5dd2
Bump react-hook-form from 7.57.0 to 7.58.0 (#620)
Bumps [react-hook-form](https://github.com/react-hook-form/react-hook-form) from 7.57.0 to 7.58.0.
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.57.0...v7.58.0)

---
updated-dependencies:
- dependency-name: react-hook-form
  dependency-version: 7.58.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 12:59:53 +03:00
dependabot[bot]
e1721df11c
Bump @types/react from 19.1.6 to 19.1.8 (#621)
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.1.6 to 19.1.8.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-version: 19.1.8
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 12:59:39 +03:00
dependabot[bot]
79883f1f09
Bump @vitejs/plugin-react from 4.5.1 to 4.5.2 (#623)
Bumps [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) from 4.5.1 to 4.5.2.
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@4.5.2/packages/plugin-react)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-react"
  dependency-version: 4.5.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 12:59:17 +03:00
dependabot[bot]
f7187eb4cf
Bump @eslint/js from 9.28.0 to 9.29.0 (#625)
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.28.0 to 9.29.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.29.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.29.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 12:58:34 +03:00
dependabot[bot]
96fd25d1cc
Bump ts-jest from 29.3.4 to 29.4.0 (#626)
Bumps [ts-jest](https://github.com/kulshekhar/ts-jest) from 29.3.4 to 29.4.0.
- [Release notes](https://github.com/kulshekhar/ts-jest/releases)
- [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/kulshekhar/ts-jest/compare/v29.3.4...v29.4.0)

---
updated-dependencies:
- dependency-name: ts-jest
  dependency-version: 29.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 12:58:18 +03:00
dependabot[bot]
d89af10b49
Bump typescript-eslint from 8.33.1 to 8.34.0 (#628)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.33.1 to 8.34.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.34.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.34.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 12:57:56 +03:00
dependabot[bot]
3062833b77
Bump @typescript-eslint/parser from 8.33.1 to 8.34.0 (#627)
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 8.33.1 to 8.34.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.34.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-version: 8.34.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 12:51:17 +03:00
dependabot[bot]
b3a97fcccb
Bump @types/node from 22.15.30 to 24.0.1 (#629)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.15.30 to 24.0.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 24.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 12:50:42 +03:00
dependabot[bot]
52ffb80f35
Bump softprops/action-gh-release from 2.2.2 to 2.3.2 (#630)
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2.2.2 to 2.3.2.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](da05d55257...72f2c25fcb)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: 2.3.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-16 12:50:22 +03:00
Aine
03bc1e3323
fix empty User Account Data error message 2025-06-14 07:34:00 +03:00
Aine
2d9ff83bbd
do not fail on incorrect MXC URLs 2025-06-10 16:32:31 +03:00
Aine
680fa3c0ee
add missing title to error pages 2025-06-10 15:17:04 +03:00
Aine
ddf835c4d1
provide more details about MXC URL when parsing fails 2025-06-10 08:42:43 +03:00
dependabot[bot]
ae50f2ee5d
Bump @tanstack/react-query from 5.79.0 to 5.80.6 (#615)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.79.0 to 5.80.6.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.80.6/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-version: 5.80.6
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-09 18:51:34 +03:00
dependabot[bot]
d95c10dfba
Bump @types/node from 22.15.29 to 22.15.30 (#616)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.15.29 to 22.15.30.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 22.15.30
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-09 18:51:22 +03:00
dependabot[bot]
590ee8c0fe
Bump typescript-eslint from 8.33.0 to 8.33.1 (#617)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.33.0 to 8.33.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.33.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.33.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-09 18:51:10 +03:00
dependabot[bot]
ca10f04f24
Bump @vitejs/plugin-react from 4.5.0 to 4.5.1 (#612)
Bumps [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) from 4.5.0 to 4.5.1.
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@4.5.1/packages/plugin-react)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-react"
  dependency-version: 4.5.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-09 18:50:57 +03:00
dependabot[bot]
d2f04fc031
Bump @mui/icons-material from 7.1.0 to 7.1.1 (#618)
Bumps [@mui/icons-material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-icons-material) from 7.1.0 to 7.1.1.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v7.1.1/packages/mui-icons-material)

---
updated-dependencies:
- dependency-name: "@mui/icons-material"
  dependency-version: 7.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-09 18:50:42 +03:00
dependabot[bot]
cb96e4f736
Bump react-router-dom from 7.6.1 to 7.6.2 (#614)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 7.6.1 to 7.6.2.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/7.6.2/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-version: 7.6.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-06-09 18:50:29 +03:00
Borislav Pantaleev
14bc205ef2
Validate that password is entered upon reactivation of account (#609)
* Validate that password is entered upon reactivation of account

* update readme
2025-06-07 01:19:01 +03:00
Borislav Pantaleev
31356c0bdc
Improve user account status toggles (#608)
* Enable Erase user if Deactivate is checked

* apply lint fixes, update readme
2025-06-07 00:40:46 +03:00
Borislav Pantaleev
ab247891dc
Use correct API to suspend/unsuspend user (#607)
* Use correct API to suspend/unsuspend user

* bring back suspend toggle

* make linter happy
2025-06-06 23:49:47 +03:00
Aine
5165625cd0
fix typos 2025-06-04 22:30:36 +03:00
Aine
cc74071933
Merge pull request #585 from etkecc/validate-base-url-on-blur
Do not check homeserver URL during typing in the login form
2025-06-03 20:59:09 +00:00
Aine
273e7b11ad
update readme; remove autofocus from username field (login form) 2025-06-03 23:57:55 +03:00
Aine
55e7d53769
Merge branch 'main' into validate-base-url-on-blur 2025-06-03 23:41:23 +03:00
Borislav Pantaleev
9c1838031c Fix server info version display with restrictBaseUrl values 2025-06-03 23:37:51 +03:00
Aine
3b61e6e02c
update yarn.lock 2025-06-02 17:50:09 +03:00
Aine
a4e4d37413
Merge pull request #589 from etkecc/dependabot/npm_and_yarn/react-hook-form-7.57.0
Bump react-hook-form from 7.56.4 to 7.57.0
2025-06-02 14:47:06 +00:00
Aine
4127954c1d
Merge pull request #592 from etkecc/dependabot/npm_and_yarn/eslint-plugin-prettier-5.4.1
Bump eslint-plugin-prettier from 5.4.0 to 5.4.1
2025-06-02 14:39:47 +00:00
Aine
554d2cd132
Merge pull request #594 from etkecc/dependabot/npm_and_yarn/typescript-eslint-8.33.0
Bump typescript-eslint from 8.32.1 to 8.33.0
2025-06-02 14:39:34 +00:00
Aine
d2326a4cf3
Merge pull request #595 from etkecc/dependabot/npm_and_yarn/mui/material-7.1.1
Bump @mui/material from 7.1.0 to 7.1.1
2025-06-02 14:39:14 +00:00
Aine
7c0c9f922d
Merge pull request #599 from etkecc/dependabot/npm_and_yarn/ra-language-russian-5.4.4
Bump ra-language-russian from 5.4.3 to 5.4.4
2025-06-02 14:38:55 +00:00
Aine
4dd3aa2375
Merge pull request #602 from etkecc/dependabot/npm_and_yarn/ra-language-french-5.8.3
Bump ra-language-french from 5.8.2 to 5.8.3
2025-06-02 14:38:42 +00:00
Aine
05d3740b80
Merge pull request #603 from etkecc/dependabot/npm_and_yarn/eslint-9.28.0
Bump eslint from 9.27.0 to 9.28.0
2025-06-02 14:38:29 +00:00
dependabot[bot]
e425efa26a
Bump eslint from 9.27.0 to 9.28.0
Bumps [eslint](https://github.com/eslint/eslint) from 9.27.0 to 9.28.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.27.0...v9.28.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.28.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-02 14:19:59 +00:00
dependabot[bot]
cd8e35ba27
Bump ra-language-russian from 5.4.3 to 5.4.4
Bumps [ra-language-russian](https://github.com/Klucherev/ra-language-russian) from 5.4.3 to 5.4.4.
- [Commits](https://github.com/Klucherev/ra-language-russian/commits)

---
updated-dependencies:
- dependency-name: ra-language-russian
  dependency-version: 5.4.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-02 14:19:32 +00:00
dependabot[bot]
710cc57c4f
Bump react-hook-form from 7.56.4 to 7.57.0
Bumps [react-hook-form](https://github.com/react-hook-form/react-hook-form) from 7.56.4 to 7.57.0.
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.56.4...v7.57.0)

---
updated-dependencies:
- dependency-name: react-hook-form
  dependency-version: 7.57.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-02 14:19:28 +00:00
dependabot[bot]
249bc4d0c2
Bump @mui/material from 7.1.0 to 7.1.1
Bumps [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) from 7.1.0 to 7.1.1.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v7.1.1/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-version: 7.1.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-02 14:18:34 +00:00
dependabot[bot]
aa6567a490
Bump typescript-eslint from 8.32.1 to 8.33.0
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.32.1 to 8.33.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.33.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.33.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-02 14:16:58 +00:00
Aine
f40cb4839e
Merge pull request #590 from etkecc/dependabot/npm_and_yarn/types/node-22.15.29
Bump @types/node from 22.15.21 to 22.15.29
2025-06-02 14:15:34 +00:00
Aine
d5df57b7ec
Merge pull request #586 from etkecc/dependabot/github_actions/docker/build-push-action-6.18.0
Bump docker/build-push-action from 6.17.0 to 6.18.0
2025-06-02 14:15:17 +00:00
Aine
5f89026db3
Merge pull request #600 from etkecc/dependabot/npm_and_yarn/types/react-19.1.6
Bump @types/react from 19.1.5 to 19.1.6
2025-06-02 14:14:49 +00:00
Aine
10aaef98b0
Merge pull request #597 from etkecc/dependabot/npm_and_yarn/tanstack/react-query-5.79.0
Bump @tanstack/react-query from 5.77.2 to 5.79.0
2025-06-02 14:14:31 +00:00
Aine
c323e170ac
Merge pull request #598 from etkecc/dependabot/npm_and_yarn/react-admin-5.8.3
Bump react-admin from 5.8.2 to 5.8.3
2025-06-02 14:14:12 +00:00
Aine
797b924a62
Merge pull request #604 from etkecc/upstream-update
Upstream update
2025-06-02 14:13:38 +00:00
Aine
f1023ebc64
update from upstream (ref: e15411a04c ) 2025-06-02 17:12:49 +03:00
Dirk Klimpel
e15411a04c
chore: bump react-admin to 5.8 and mui to 7.1 (#679) 2025-06-02 14:50:28 +02:00
Dirk Klimpel
3902dcd3d1
fix(Dockerfile): FROM and AS both in uppercase, FromAsCasing (#680) 2025-06-02 14:48:44 +02:00
dependabot[bot]
9c911abfb7
Bump ra-language-french from 5.8.2 to 5.8.3
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.8.2 to 5.8.3.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.8.2...v5.8.3)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-version: 5.8.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-02 08:40:33 +00:00
dependabot[bot]
23c39cede8
Bump @types/react from 19.1.5 to 19.1.6
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.1.5 to 19.1.6.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-version: 19.1.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-02 08:40:13 +00:00
dependabot[bot]
50e62f0b6c
Bump react-admin from 5.8.2 to 5.8.3
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.8.2 to 5.8.3.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.8.2...v5.8.3)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-version: 5.8.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-02 08:38:14 +00:00
dependabot[bot]
d7d1d3c5b5
Bump @tanstack/react-query from 5.77.2 to 5.79.0
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.77.2 to 5.79.0.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.79.0/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-version: 5.79.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-02 08:38:07 +00:00
dependabot[bot]
16d339c6f3
Bump eslint-plugin-prettier from 5.4.0 to 5.4.1
Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.4.0 to 5.4.1.
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.4.0...v5.4.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-prettier
  dependency-version: 5.4.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-02 08:35:23 +00:00
dependabot[bot]
9b0786f699
Bump @types/node from 22.15.21 to 22.15.29
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.15.21 to 22.15.29.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 22.15.29
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-02 08:34:49 +00:00
dependabot[bot]
fc1b20e95b
Bump docker/build-push-action from 6.17.0 to 6.18.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.17.0 to 6.18.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](1dc7386353...263435318d)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-version: 6.18.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-02 07:59:53 +00:00
Dirk Klimpel
ef8ae9b38f
fix: Start if BASE_URL is not defined (#677) 2025-05-30 09:01:22 +02:00
Dirk Klimpel
7a286ad506
Downgrade react-router to 6.27.0 to fix import users (#678) 2025-05-30 08:58:39 +02:00
Borislav Pantaleev
f7d46a4cec bring back handleUsernameChange 2025-05-29 00:10:05 +03:00
Borislav Pantaleev
4ac465f16c Check base_url server info onBlur 2025-05-28 23:59:04 +03:00
Aine
c82d8653fd
update deps 2025-05-26 16:19:10 +03:00
Aine
949c2e8809
Merge pull request #578 from etkecc/dependabot/npm_and_yarn/tanstack/react-query-5.77.1
Bump @tanstack/react-query from 5.76.1 to 5.77.1
2025-05-26 12:23:14 +00:00
Aine
20a1cec358
Merge pull request #579 from etkecc/dependabot/npm_and_yarn/react-router-dom-7.6.1
Bump react-router-dom from 7.6.0 to 7.6.1
2025-05-26 12:23:03 +00:00
Aine
21240b8ada
Merge pull request #580 from etkecc/dependabot/npm_and_yarn/vitejs/plugin-react-4.5.0
Bump @vitejs/plugin-react from 4.4.1 to 4.5.0
2025-05-26 12:22:48 +00:00
Aine
f218363e97
Merge pull request #576 from etkecc/dependabot/npm_and_yarn/papaparse-5.5.3
Bump papaparse from 5.5.2 to 5.5.3
2025-05-26 12:22:28 +00:00
Aine
1a5fd713da
Merge pull request #581 from etkecc/dependabot/npm_and_yarn/types/lodash-4.17.17
Bump @types/lodash from 4.17.16 to 4.17.17
2025-05-26 12:22:05 +00:00
dependabot[bot]
3d6202f335
Bump papaparse from 5.5.2 to 5.5.3
Bumps [papaparse](https://github.com/mholt/PapaParse) from 5.5.2 to 5.5.3.
- [Release notes](https://github.com/mholt/PapaParse/releases)
- [Commits](https://github.com/mholt/PapaParse/commits)

---
updated-dependencies:
- dependency-name: papaparse
  dependency-version: 5.5.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-26 12:20:07 +00:00
dependabot[bot]
9161e26d3a
Bump @vitejs/plugin-react from 4.4.1 to 4.5.0
Bumps [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) from 4.4.1 to 4.5.0.
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@4.5.0/packages/plugin-react)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-react"
  dependency-version: 4.5.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-26 12:20:03 +00:00
dependabot[bot]
b00d810fae
Bump @types/lodash from 4.17.16 to 4.17.17
Bumps [@types/lodash](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash) from 4.17.16 to 4.17.17.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash)

---
updated-dependencies:
- dependency-name: "@types/lodash"
  dependency-version: 4.17.17
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-26 12:19:55 +00:00
Aine
9a4b995d09
Merge pull request #577 from etkecc/dependabot/npm_and_yarn/types/react-19.1.5
Bump @types/react from 19.1.4 to 19.1.5
2025-05-26 12:17:42 +00:00
Aine
c97405b622
Merge pull request #575 from etkecc/dependabot/npm_and_yarn/types/node-22.15.21
Bump @types/node from 22.15.19 to 22.15.21
2025-05-26 12:17:25 +00:00
dependabot[bot]
b5ebd9173e
Bump react-router-dom from 7.6.0 to 7.6.1
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 7.6.0 to 7.6.1.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.6.1/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-version: 7.6.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-26 09:53:56 +00:00
dependabot[bot]
a1ff4dc9ef
Bump @tanstack/react-query from 5.76.1 to 5.77.1
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.76.1 to 5.77.1.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.77.1/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-version: 5.77.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-26 09:52:55 +00:00
dependabot[bot]
2298fee054
Bump @types/react from 19.1.4 to 19.1.5
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.1.4 to 19.1.5.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-version: 19.1.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-26 09:52:50 +00:00
dependabot[bot]
e236126a30
Bump @types/node from 22.15.19 to 22.15.21
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.15.19 to 22.15.21.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 22.15.21
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-26 09:52:22 +00:00
Aine
7da5265575
update version in package.json 2025-05-20 22:05:51 +03:00
Aine
62fc97a417
Sync with upstream 2025-05-20 22:02:51 +03:00
Aine
5bec4c71ea
update yarn.lock 2025-05-19 12:34:38 +03:00
Aine
245dadc470
Merge pull request #562 from etkecc/dependabot/npm_and_yarn/react-hook-form-7.56.4
Bump react-hook-form from 7.56.3 to 7.56.4
2025-05-19 09:30:43 +00:00
Aine
08cde13fd4
Merge pull request #561 from etkecc/dependabot/npm_and_yarn/types/react-19.1.4
Bump @types/react from 19.1.3 to 19.1.4
2025-05-19 09:30:30 +00:00
Aine
765456d233
Merge pull request #566 from etkecc/dependabot/npm_and_yarn/types/node-22.15.19
Bump @types/node from 22.15.17 to 22.15.19
2025-05-19 09:30:17 +00:00
Aine
b6bc4a2d43
Merge pull request #558 from etkecc/dependabot/npm_and_yarn/ts-jest-29.3.4
Bump ts-jest from 29.3.2 to 29.3.4
2025-05-19 09:29:29 +00:00
Aine
851478bbcb
Merge pull request #563 from etkecc/dependabot/npm_and_yarn/tanstack/react-query-5.76.1
Bump @tanstack/react-query from 5.75.7 to 5.76.1
2025-05-19 09:29:11 +00:00
Aine
ff8e43631a
Merge pull request #565 from etkecc/dependabot/npm_and_yarn/eslint-9.27.0
Bump eslint from 9.26.0 to 9.27.0
2025-05-19 09:28:54 +00:00
Aine
7b8a43b835
Merge pull request #567 from etkecc/dependabot/npm_and_yarn/typescript-eslint-8.32.1
Bump typescript-eslint from 8.32.0 to 8.32.1
2025-05-19 09:28:36 +00:00
Aine
bc0c186242
Merge pull request #572 from etkecc/dependabot/npm_and_yarn/ra-language-french-5.8.2
Bump ra-language-french from 5.8.0 to 5.8.2
2025-05-19 09:28:20 +00:00
dependabot[bot]
d5b9981bf0
Bump eslint from 9.26.0 to 9.27.0
Bumps [eslint](https://github.com/eslint/eslint) from 9.26.0 to 9.27.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.26.0...v9.27.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.27.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-19 09:24:01 +00:00
dependabot[bot]
7a8977a00c
Bump @tanstack/react-query from 5.75.7 to 5.76.1
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.75.7 to 5.76.1.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.76.1/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-version: 5.76.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-19 09:23:45 +00:00
dependabot[bot]
5297e56eca
Bump react-hook-form from 7.56.3 to 7.56.4
Bumps [react-hook-form](https://github.com/react-hook-form/react-hook-form) from 7.56.3 to 7.56.4.
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.56.3...v7.56.4)

---
updated-dependencies:
- dependency-name: react-hook-form
  dependency-version: 7.56.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-19 09:23:43 +00:00
Aine
82ff610b89
Merge pull request #564 from etkecc/dependabot/npm_and_yarn/react-admin-5.8.2
Bump react-admin from 5.8.0 to 5.8.2
2025-05-19 09:21:18 +00:00
Aine
263f25303e
Merge pull request #573 from etkecc/dependabot/github_actions/docker/build-push-action-6.17.0
Bump docker/build-push-action from 6.16.0 to 6.17.0
2025-05-19 09:20:56 +00:00
dependabot[bot]
2aa7cdcb97
Bump docker/build-push-action from 6.16.0 to 6.17.0
Bumps [docker/build-push-action](https://github.com/docker/build-push-action) from 6.16.0 to 6.17.0.
- [Release notes](https://github.com/docker/build-push-action/releases)
- [Commits](14487ce63c...1dc7386353)

---
updated-dependencies:
- dependency-name: docker/build-push-action
  dependency-version: 6.17.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-19 07:49:35 +00:00
dependabot[bot]
e3e8f028f4
Bump ra-language-french from 5.8.0 to 5.8.2
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.8.0 to 5.8.2.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.8.0...v5.8.2)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-version: 5.8.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-19 07:41:47 +00:00
dependabot[bot]
f18523e0f2
Bump typescript-eslint from 8.32.0 to 8.32.1
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.32.0 to 8.32.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.32.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.32.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-19 07:40:42 +00:00
dependabot[bot]
3533cbed93
Bump @types/node from 22.15.17 to 22.15.19
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.15.17 to 22.15.19.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 22.15.19
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-19 07:40:40 +00:00
dependabot[bot]
bf1cec2796
Bump react-admin from 5.8.0 to 5.8.2
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.8.0 to 5.8.2.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.8.0...v5.8.2)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-version: 5.8.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-19 07:39:55 +00:00
dependabot[bot]
7005d08c7e
Bump @types/react from 19.1.3 to 19.1.4
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.1.3 to 19.1.4.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-version: 19.1.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-19 07:39:36 +00:00
dependabot[bot]
e15b45bcf9
Bump ts-jest from 29.3.2 to 29.3.4
Bumps [ts-jest](https://github.com/kulshekhar/ts-jest) from 29.3.2 to 29.3.4.
- [Release notes](https://github.com/kulshekhar/ts-jest/releases)
- [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/kulshekhar/ts-jest/compare/v29.3.2...v29.3.4)

---
updated-dependencies:
- dependency-name: ts-jest
  dependency-version: 29.3.4
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-19 07:39:05 +00:00
Aine
603737b2ad
Merge pull request #545 from etkecc/dependabot/npm_and_yarn/mui/utils-7.1.0
Bump @mui/utils from 6.4.9 to 7.1.0
2025-05-12 09:21:15 +00:00
Aine
eebc7a4fab
fix tests 2025-05-12 12:20:15 +03:00
Aine
3725b01fe5
Merge pull request #554 from etkecc/dependabot/npm_and_yarn/react-router-dom-7.6.0
Bump react-router-dom from 7.5.3 to 7.6.0
2025-05-12 09:02:22 +00:00
dependabot[bot]
6c41aab463
Bump react-router-dom from 7.5.3 to 7.6.0
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 7.5.3 to 7.6.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.6.0/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-version: 7.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 09:01:34 +00:00
Aine
e8987607ff
Merge pull request #548 from etkecc/dependabot/npm_and_yarn/react-router-7.6.0
Bump react-router from 7.5.3 to 7.6.0
2025-05-12 08:58:38 +00:00
Aine
9c440024bb
Merge pull request #549 from etkecc/dependabot/npm_and_yarn/react-hook-form-7.56.3
Bump react-hook-form from 7.56.2 to 7.56.3
2025-05-12 08:58:20 +00:00
Aine
aa10df711e
Merge pull request #550 from etkecc/dependabot/npm_and_yarn/typescript-eslint-8.32.0
Bump typescript-eslint from 8.31.1 to 8.32.0
2025-05-12 08:56:15 +00:00
Aine
51aca16e2f
Merge pull request #551 from etkecc/dependabot/npm_and_yarn/eslint-plugin-prettier-5.4.0
Bump eslint-plugin-prettier from 5.3.1 to 5.4.0
2025-05-12 08:55:36 +00:00
Aine
4f1b9c2bfa
Merge pull request #546 from etkecc/dependabot/npm_and_yarn/eslint-config-prettier-10.1.5
Bump eslint-config-prettier from 10.1.2 to 10.1.5
2025-05-12 08:55:23 +00:00
Aine
a801957194
Merge pull request #547 from etkecc/dependabot/npm_and_yarn/types/node-22.15.17
Bump @types/node from 22.15.3 to 22.15.17
2025-05-12 08:55:10 +00:00
dependabot[bot]
8f527eeb85
Bump @types/node from 22.15.3 to 22.15.17
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.15.3 to 22.15.17.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 22.15.17
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 08:44:38 +00:00
dependabot[bot]
92632f81f8
Bump typescript-eslint from 8.31.1 to 8.32.0
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.31.1 to 8.32.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.32.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.32.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 08:44:17 +00:00
Aine
e76809fb37
Merge pull request #553 from etkecc/dependabot/npm_and_yarn/types/papaparse-5.3.16
Bump @types/papaparse from 5.3.15 to 5.3.16
2025-05-12 08:41:52 +00:00
dependabot[bot]
03d142a47c
Bump @types/papaparse from 5.3.15 to 5.3.16
Bumps [@types/papaparse](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/papaparse) from 5.3.15 to 5.3.16.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/papaparse)

---
updated-dependencies:
- dependency-name: "@types/papaparse"
  dependency-version: 5.3.16
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 08:39:12 +00:00
dependabot[bot]
f589427b3c
Bump @mui/utils from 6.4.9 to 7.1.0
Bumps [@mui/utils](https://github.com/mui/material-ui/tree/HEAD/packages/mui-utils) from 6.4.9 to 7.1.0.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v7.1.0/packages/mui-utils)

---
updated-dependencies:
- dependency-name: "@mui/utils"
  dependency-version: 7.1.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 08:39:02 +00:00
Aine
16d78b577e
Merge pull request #555 from etkecc/dependabot/npm_and_yarn/tanstack/react-query-5.75.7
Bump @tanstack/react-query from 5.75.4 to 5.75.7
2025-05-12 08:37:00 +00:00
Aine
649450f7ee
Merge pull request #556 from etkecc/dependabot/npm_and_yarn/types/react-19.1.3
Bump @types/react from 19.1.2 to 19.1.3
2025-05-12 08:36:45 +00:00
Aine
a64705c28c
Merge pull request #552 from etkecc/dependabot/npm_and_yarn/vite-6.3.5
Bump vite from 6.3.4 to 6.3.5
2025-05-12 08:36:29 +00:00
dependabot[bot]
5d775ca08b
Bump @types/react from 19.1.2 to 19.1.3
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.1.2 to 19.1.3.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-version: 19.1.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 07:45:35 +00:00
dependabot[bot]
b2289e5776
Bump @tanstack/react-query from 5.75.4 to 5.75.7
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.75.4 to 5.75.7.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.75.7/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-version: 5.75.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 07:45:26 +00:00
dependabot[bot]
607abc003b
Bump vite from 6.3.4 to 6.3.5
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.3.4 to 6.3.5.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.3.5/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.3.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 07:44:55 +00:00
dependabot[bot]
210623b39e
Bump eslint-plugin-prettier from 5.3.1 to 5.4.0
Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.3.1 to 5.4.0.
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.3.1...v5.4.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-prettier
  dependency-version: 5.4.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 07:44:41 +00:00
dependabot[bot]
8c72dbbd9a
Bump react-hook-form from 7.56.2 to 7.56.3
Bumps [react-hook-form](https://github.com/react-hook-form/react-hook-form) from 7.56.2 to 7.56.3.
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.56.2...v7.56.3)

---
updated-dependencies:
- dependency-name: react-hook-form
  dependency-version: 7.56.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 07:44:13 +00:00
dependabot[bot]
5779ce6301
Bump react-router from 7.5.3 to 7.6.0
Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) from 7.5.3 to 7.6.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@7.6.0/packages/react-router)

---
updated-dependencies:
- dependency-name: react-router
  dependency-version: 7.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 07:44:04 +00:00
dependabot[bot]
664573d65e
Bump eslint-config-prettier from 10.1.2 to 10.1.5
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 10.1.2 to 10.1.5.
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v10.1.2...v10.1.5)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-version: 10.1.5
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-12 07:43:08 +00:00
Aine
cfcc3f5a73
set guests=false by default in users list 2025-05-12 10:33:52 +03:00
Aine
8c303b7940
update readme 2025-05-09 23:25:58 +03:00
Aine
785be9187d
add docker hub image, fixes #541 2025-05-09 23:21:12 +03:00
Aine
69b04736d6
Merge pull request #543 from etkecc/update-from-upstream
Backport history from Awesome-Technologies/synapse-admin v0.10.4
2025-05-09 19:53:32 +00:00
Aine
4051631244
Merge branch 'master' into update-from-upstream 2025-05-09 22:51:45 +03:00
Aine
b941b4c787
Merge pull request #540 from etkecc/update-from-upstream
Update from upstream
2025-05-09 11:04:44 +00:00
Aine
45b5213c8c
Merge branch 'master' 2025-05-09 14:03:04 +03:00
Aine
3167b55430
lint fix 2025-05-06 11:31:43 +03:00
dependabot[bot]
cc44b5581f
Bump react-router-dom from 7.5.2 to 7.5.3 (#528)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 7.5.2 to 7.5.3.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.5.3/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-version: 7.5.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-06 11:27:16 +03:00
dependabot[bot]
30615eaf02
Bump @typescript-eslint/parser from 8.31.0 to 8.31.1 (#534)
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 8.31.0 to 8.31.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.31.1/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-version: 8.31.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-06 11:18:49 +03:00
dependabot[bot]
4e88f03aab
Bump react-hook-form from 7.56.1 to 7.56.2 (#531)
Bumps [react-hook-form](https://github.com/react-hook-form/react-hook-form) from 7.56.1 to 7.56.2.
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.56.1...v7.56.2)

---
updated-dependencies:
- dependency-name: react-hook-form
  dependency-version: 7.56.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-06 11:06:05 +03:00
dependabot[bot]
9bc2788560
Bump @typescript-eslint/eslint-plugin from 8.31.0 to 8.31.1 (#536)
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 8.31.0 to 8.31.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.31.1/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-version: 8.31.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-06 11:05:38 +03:00
dependabot[bot]
a65eb56098
Bump @tanstack/react-query from 5.74.7 to 5.75.2 (#530)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.74.7 to 5.75.2.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.75.2/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-version: 5.75.2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-06 10:48:59 +03:00
dependabot[bot]
1c95995478
Bump eslint-plugin-prettier from 5.2.6 to 5.3.1 (#539)
Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.2.6 to 5.3.1.
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.2.6...v5.3.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-prettier
  dependency-version: 5.3.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-06 10:48:30 +03:00
dependabot[bot]
d4c07980d5
Bump typescript-eslint from 8.31.0 to 8.31.1 (#526)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.31.0 to 8.31.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.31.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.31.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-06 10:48:09 +03:00
dependabot[bot]
96946186c9
Bump eslint from 9.25.1 to 9.26.0 (#527)
Bumps [eslint](https://github.com/eslint/eslint) from 9.25.1 to 9.26.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.25.1...v9.26.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.26.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-06 10:47:53 +03:00
dependabot[bot]
742106071d
Bump ra-language-french from 5.7.4 to 5.8.0 (#538)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.7.4 to 5.8.0.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.7.4...v5.8.0)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-version: 5.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-06 10:44:12 +03:00
dependabot[bot]
ce79eb330c
Bump react-admin from 5.7.4 to 5.8.0 (#533)
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.7.4 to 5.8.0.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.7.4...v5.8.0)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-version: 5.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-06 10:43:54 +03:00
dependabot[bot]
04d07f5eb3
Bump vite from 6.3.3 to 6.3.4 in the npm_and_yarn group (#524)
Bumps the npm_and_yarn group with 1 update: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `vite` from 6.3.3 to 6.3.4
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.3.4/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.3.4
  dependency-type: direct:development
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-05-01 08:38:00 +03:00
Aine
de7930f472
nope, missed one 2025-04-29 18:02:36 +03:00
Aine
2a66988807
pin all 3rdparty actions 2025-04-29 18:00:17 +03:00
Aine
5bfa98d3a1
use github action commit hash 2025-04-29 17:54:03 +03:00
dependabot[bot]
ea41f929a6
Bump @tanstack/react-query from 5.74.4 to 5.74.7 (#523)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.74.4 to 5.74.7.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.74.7/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-version: 5.74.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-29 17:46:30 +03:00
dependabot[bot]
037dc09da6
Bump @types/node from 22.15.1 to 22.15.3 (#517)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.15.1 to 22.15.3.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 22.15.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-29 17:46:16 +03:00
dependabot[bot]
b9ad596f38
Bump ra-language-french from 5.7.3 to 5.7.4 (#520)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.7.3 to 5.7.4.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.7.3...v5.7.4)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-version: 5.7.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-29 17:45:54 +03:00
dependabot[bot]
c83e61af2c
Bump react-admin from 5.7.3 to 5.7.4 (#522)
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.7.3 to 5.7.4.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.7.3...v5.7.4)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-version: 5.7.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-29 17:45:32 +03:00
Borislav Pantaleev
2752716497
Remove getPermissions to fix redirect loop (#516) 2025-04-26 05:22:51 +00:00
Aine
64f9d8b48c
update deps 2025-04-25 09:15:28 +03:00
dependabot[bot]
81fb008e59
Bump react-router-dom from 7.5.0 to 7.5.1 (#498)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 7.5.0 to 7.5.1.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.5.1/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-version: 7.5.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-23 14:29:45 +03:00
dependabot[bot]
cede7c611b
Bump react-router from 7.5.0 to 7.5.1 (#512)
Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) from 7.5.0 to 7.5.1.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@7.5.1/packages/react-router)

---
updated-dependencies:
- dependency-name: react-router
  dependency-version: 7.5.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Aine <97398200+aine-etke@users.noreply.github.com>
2025-04-23 14:23:45 +03:00
dependabot[bot]
8d66dca068
Bump react-hook-form from 7.55.0 to 7.56.0 (#500)
Bumps [react-hook-form](https://github.com/react-hook-form/react-hook-form) from 7.55.0 to 7.56.0.
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.55.0...v7.56.0)

---
updated-dependencies:
- dependency-name: react-hook-form
  dependency-version: 7.56.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-23 14:22:27 +03:00
dependabot[bot]
26620966ab
Bump @types/react from 19.1.1 to 19.1.2 (#506)
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.1.1 to 19.1.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-version: 19.1.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-23 14:22:01 +03:00
dependabot[bot]
29cb61bf47
Bump eslint from 9.24.0 to 9.25.0 (#505)
Bumps [eslint](https://github.com/eslint/eslint) from 9.24.0 to 9.25.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.24.0...v9.25.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.25.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-23 14:21:41 +03:00
dependabot[bot]
6b5863e257
Bump typescript-eslint from 8.29.1 to 8.30.1 (#510)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.29.1 to 8.30.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.30.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.30.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-23 14:18:57 +03:00
dependabot[bot]
5a2c6ec326
Bump @eslint/js from 9.24.0 to 9.25.0 (#497)
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.24.0 to 9.25.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.25.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-version: 9.25.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-23 14:16:43 +03:00
dependabot[bot]
f52bce55a8
Bump @tanstack/react-query from 5.74.0 to 5.74.4 (#501)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.74.0 to 5.74.4.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.74.4/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-version: 5.74.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-23 14:16:24 +03:00
dependabot[bot]
76d3f42017
Bump @vitejs/plugin-react from 4.3.4 to 4.4.1 (#508)
Bumps [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) from 4.3.4 to 4.4.1.
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/plugin-react@4.4.1/packages/plugin-react)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-react"
  dependency-version: 4.4.1
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-23 14:15:55 +03:00
dependabot[bot]
5bfd330f08
Bump ra-language-french from 5.7.2 to 5.7.3 (#507)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.7.2 to 5.7.3.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.7.2...v5.7.3)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-version: 5.7.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-23 14:15:35 +03:00
dependabot[bot]
6d8ea12c5a
Bump vite from 6.2.6 to 6.3.2 (#502)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.6 to 6.3.2.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.3.2/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.3.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-23 14:15:21 +03:00
dependabot[bot]
399b37f57e
Bump react-admin from 5.7.2 to 5.7.3 (#499)
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.7.2 to 5.7.3.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.7.2...v5.7.3)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-version: 5.7.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-23 13:35:05 +03:00
Aine
e6f3d15b45
update docs 2025-04-15 16:10:10 +03:00
Aine
75e4cfa0c4
add contributing and security guidelines 2025-04-15 13:10:16 +03:00
Aine
ce3337c46f
Update issue templates 2025-04-15 13:08:38 +03:00
Aine
54b67b3b48
ensure MXC URLs properly parsed when media IDs contain hypens, fixes #494 2025-04-15 11:17:12 +03:00
dependabot[bot]
61013e1875
Bump typescript-eslint from 8.29.0 to 8.29.1 (#492)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.29.0 to 8.29.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.29.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-version: 8.29.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-14 10:50:53 +03:00
dependabot[bot]
52d0d80816
Bump ts-jest from 29.3.1 to 29.3.2 (#484)
Bumps [ts-jest](https://github.com/kulshekhar/ts-jest) from 29.3.1 to 29.3.2.
- [Release notes](https://github.com/kulshekhar/ts-jest/releases)
- [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/kulshekhar/ts-jest/compare/v29.3.1...v29.3.2)

---
updated-dependencies:
- dependency-name: ts-jest
  dependency-version: 29.3.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-14 10:49:25 +03:00
dependabot[bot]
1fb58d3694
Bump @tanstack/react-query from 5.71.10 to 5.74.0 (#482)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.71.10 to 5.74.0.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.74.0/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-version: 5.74.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-14 10:48:11 +03:00
dependabot[bot]
8600154553
Bump eslint-config-prettier from 10.1.1 to 10.1.2 (#489)
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 10.1.1 to 10.1.2.
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v10.1.1...v10.1.2)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-version: 10.1.2
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-14 10:47:59 +03:00
dependabot[bot]
dda348e270
Bump @typescript-eslint/eslint-plugin from 8.29.0 to 8.29.1 (#490)
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 8.29.0 to 8.29.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.29.1/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-version: 8.29.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-14 10:47:41 +03:00
dependabot[bot]
d2fd4f2114
Bump @types/node from 22.14.0 to 22.14.1 (#491)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.14.0 to 22.14.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 22.14.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-14 10:44:51 +03:00
dependabot[bot]
6f5dd89056
Bump @types/react from 19.1.0 to 19.1.1 (#487)
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.1.0 to 19.1.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-version: 19.1.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-14 10:44:35 +03:00
dependabot[bot]
0a00e0a474
Bump ra-language-french from 5.7.1 to 5.7.2 (#485)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.7.1 to 5.7.2.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.7.1...v5.7.2)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-version: 5.7.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-14 10:44:22 +03:00
dependabot[bot]
e63b2f54b7
Bump react-admin from 5.7.1 to 5.7.2 (#483)
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.7.1 to 5.7.2.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.7.1...v5.7.2)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-version: 5.7.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-14 10:41:27 +03:00
dependabot[bot]
85f1d6d3ed
Bump vite from 6.2.5 to 6.2.6 in the npm_and_yarn group (#479)
Bumps the npm_and_yarn group with 1 update: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `vite` from 6.2.5 to 6.2.6
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.2.6/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.2.6/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.2.6
  dependency-type: direct:development
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-12 20:37:22 +03:00
Borislav Pantaleev
107d9f4e39
Fix long display names for users and rooms with word-break (#480) 2025-04-11 22:49:27 +03:00
dependabot[bot]
4f488e5a39
Bump react-router-dom from 7.4.1 to 7.5.0 (#467)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 7.4.1 to 7.5.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.5.0/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-version: 7.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-11 12:58:37 +03:00
dependabot[bot]
5a98844f1f
Bump react-router from 7.4.1 to 7.5.0 (#473)
Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) from 7.4.1 to 7.5.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@7.5.0/packages/react-router)

---
updated-dependencies:
- dependency-name: react-router
  dependency-version: 7.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-11 12:56:25 +03:00
dependabot[bot]
cabb9700a8
Bump react-test-renderer from 19.0.0 to 19.1.0 (#470)
Bumps [react-test-renderer](https://github.com/facebook/react/tree/HEAD/packages/react-test-renderer) from 19.0.0 to 19.1.0.
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.1.0/packages/react-test-renderer)

---
updated-dependencies:
- dependency-name: react-test-renderer
  dependency-version: 19.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-11 12:54:35 +03:00
dependabot[bot]
d02324d14c
Bump @testing-library/react from 16.2.0 to 16.3.0 (#468)
Bumps [@testing-library/react](https://github.com/testing-library/react-testing-library) from 16.2.0 to 16.3.0.
- [Release notes](https://github.com/testing-library/react-testing-library/releases)
- [Changelog](https://github.com/testing-library/react-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/react-testing-library/compare/v16.2.0...v16.3.0)

---
updated-dependencies:
- dependency-name: "@testing-library/react"
  dependency-version: 16.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-11 12:52:44 +03:00
dependabot[bot]
929d638f45
Bump eslint-plugin-prettier from 5.2.5 to 5.2.6 (#460)
Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.2.5 to 5.2.6.
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.2.5...v5.2.6)

---
updated-dependencies:
- dependency-name: eslint-plugin-prettier
  dependency-version: 5.2.6
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-11 12:52:21 +03:00
dependabot[bot]
19896cb7cf
Bump @mui/utils from 6.4.8 to 6.4.9 (#458)
Bumps [@mui/utils](https://github.com/mui/material-ui/tree/HEAD/packages/mui-utils) from 6.4.8 to 6.4.9.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/v6.4.9/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.4.9/packages/mui-utils)

---
updated-dependencies:
- dependency-name: "@mui/utils"
  dependency-version: 6.4.9
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-11 12:52:00 +03:00
dependabot[bot]
e3d093c960
Bump ts-jest-mock-import-meta from 1.2.1 to 1.3.0 (#463)
Bumps [ts-jest-mock-import-meta](https://github.com/ThomZz/ts-jest-mock-import-meta) from 1.2.1 to 1.3.0.
- [Release notes](https://github.com/ThomZz/ts-jest-mock-import-meta/releases)
- [Commits](https://github.com/ThomZz/ts-jest-mock-import-meta/compare/v1.2.1...v1.3.0)

---
updated-dependencies:
- dependency-name: ts-jest-mock-import-meta
  dependency-version: 1.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-11 12:51:34 +03:00
dependabot[bot]
59b4e8c2af
Bump ts-jest from 29.3.0 to 29.3.1 (#466)
Bumps [ts-jest](https://github.com/kulshekhar/ts-jest) from 29.3.0 to 29.3.1.
- [Release notes](https://github.com/kulshekhar/ts-jest/releases)
- [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/kulshekhar/ts-jest/compare/v29.3.0...v29.3.1)

---
updated-dependencies:
- dependency-name: ts-jest
  dependency-version: 29.3.1
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-11 12:51:02 +03:00
dependabot[bot]
e08d3b6828
Bump @types/node from 22.13.14 to 22.14.0 (#469)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.13.14 to 22.14.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-version: 22.14.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-11 12:50:31 +03:00
dependabot[bot]
0f03011def
Bump @types/react from 19.0.12 to 19.1.0 (#474)
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.0.12 to 19.1.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-version: 19.1.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-11 12:50:07 +03:00
dependabot[bot]
6bdc9e35c4
Bump typescript from 5.8.2 to 5.8.3 (#475)
Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.8.2 to 5.8.3.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release-publish.yml)
- [Commits](https://github.com/microsoft/TypeScript/commits)

---
updated-dependencies:
- dependency-name: typescript
  dependency-version: 5.8.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-11 12:49:46 +03:00
dependabot[bot]
09bd471388
Bump @tanstack/react-query from 5.71.1 to 5.71.10 (#476)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.71.1 to 5.71.10.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.71.10/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-version: 5.71.10
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-11 12:49:19 +03:00
dependabot[bot]
4e90aac326
Bump ra-language-french from 5.7.0 to 5.7.1 (#464)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.7.0 to 5.7.1.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.7.0...v5.7.1)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-version: 5.7.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-11 12:49:03 +03:00
dependabot[bot]
ad40ee70e5
Bump eslint from 9.23.0 to 9.24.0 (#471)
Bumps [eslint](https://github.com/eslint/eslint) from 9.23.0 to 9.24.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.23.0...v9.24.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-version: 9.24.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-11 12:48:22 +03:00
dependabot[bot]
b07050faf5
Bump react-admin from 5.7.0 to 5.7.1 (#472)
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.7.0 to 5.7.1.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.7.0...v5.7.1)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-version: 5.7.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-11 12:48:05 +03:00
Borislav Pantaleev
0832c43d76
(etke.cc-exclusive) Server Actions page (#457)
* WIP: add scheduler commands

* refactor scheduler commands page

* WIP on CRUD for ScheduledCommands

* more refactoring, finish CRUD On scheduled pages

* Add info text about Scheduler service

* Finish recurring commands add/edit

* add more texts

* fix server status behavior on not-loaded-yet state; adjust texts; lint fixes

* add link to the help pages in the commands palette

* Move Commands Panel to ServerSchedulesPage

* Rename Server Schedules to Server Actions

* more texts, a bit changed visual of the actions page, lint fix

* add docs

* fix tests

* Add UTC label to scheduled command create/edit
2025-04-11 12:41:47 +03:00
Aine
e2d3c0792b
ensure users MXID is encoded in the datagrid links and create/edit form redirects, fixes #477 2025-04-08 18:29:06 +03:00
Aine
bac962c127
remove unused eslint plugin, run eslint --fix, rollback node memory workaround in ci 2025-04-05 21:37:31 +03:00
Aine
738685c599
increase max-old-space-size 2025-04-05 21:16:02 +03:00
Aine
d781268019
set --max-old-space-size in CI 2025-04-05 21:14:02 +03:00
Aine
218f0ba03c
Configurable CORS credentials (#456)
* Configurable CORS credentials

* update readme
2025-04-05 21:08:29 +03:00
dependabot[bot]
f4084969b6
Bump vite from 6.2.4 to 6.2.5 in the npm_and_yarn group (#455)
Bumps the npm_and_yarn group with 1 update: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `vite` from 6.2.4 to 6.2.5
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.2.5/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.2.5/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-version: 6.2.5
  dependency-type: direct:development
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-04-04 18:03:14 +00:00
Aine
a9fefa238c
fix deps 2025-03-31 22:17:56 +03:00
dependabot[bot]
75a408a804
Bump react from 19.0.0 to 19.1.0 (#448)
Bumps [react](https://github.com/facebook/react/tree/HEAD/packages/react) from 19.0.0 to 19.1.0.
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.1.0/packages/react)

---
updated-dependencies:
- dependency-name: react
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 22:14:30 +03:00
dependabot[bot]
c7bdc0ce4f
Bump react-is from 19.0.0 to 19.1.0 (#444)
Bumps [react-is](https://github.com/facebook/react/tree/HEAD/packages/react-is) from 19.0.0 to 19.1.0.
- [Release notes](https://github.com/facebook/react/releases)
- [Changelog](https://github.com/facebook/react/blob/main/CHANGELOG.md)
- [Commits](https://github.com/facebook/react/commits/v19.1.0/packages/react-is)

---
updated-dependencies:
- dependency-name: react-is
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 22:13:55 +03:00
dependabot[bot]
b117864f04
Bump react-hook-form from 7.54.2 to 7.55.0 (#453)
Bumps [react-hook-form](https://github.com/react-hook-form/react-hook-form) from 7.54.2 to 7.55.0.
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.54.2...v7.55.0)

---
updated-dependencies:
- dependency-name: react-hook-form
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 22:09:44 +03:00
dependabot[bot]
39996db2e0
Bump react-router-dom from 7.4.0 to 7.4.1 (#451)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 7.4.0 to 7.4.1.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.4.1/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 22:06:51 +03:00
dependabot[bot]
05b0864759
Bump react-router from 7.4.0 to 7.4.1 (#446)
Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) from 7.4.0 to 7.4.1.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@7.4.1/packages/react-router)

---
updated-dependencies:
- dependency-name: react-router
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 22:04:29 +03:00
dependabot[bot]
a24b5b1914
Bump @mui/icons-material from 6.4.7 to 6.4.8 (#439)
Bumps [@mui/icons-material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-icons-material) from 6.4.7 to 6.4.8.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/v6.4.8/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.4.8/packages/mui-icons-material)

---
updated-dependencies:
- dependency-name: "@mui/icons-material"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 22:00:56 +03:00
dependabot[bot]
765f6d4da8
Bump @tanstack/react-query from 5.69.0 to 5.71.0 (#441)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.69.0 to 5.71.0.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.71.0/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 22:00:43 +03:00
dependabot[bot]
386e1e8fb2
Bump typescript-eslint from 8.27.0 to 8.28.0 (#440)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.27.0 to 8.28.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.28.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 22:00:16 +03:00
dependabot[bot]
d62985d1a7
Bump @typescript-eslint/parser from 8.27.0 to 8.28.0 (#447)
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 8.27.0 to 8.28.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.28.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 21:36:25 +03:00
dependabot[bot]
13afd4ef61
Bump eslint-plugin-prettier from 5.2.4 to 5.2.5 (#449)
Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.2.4 to 5.2.5.
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.2.4...v5.2.5)

---
updated-dependencies:
- dependency-name: eslint-plugin-prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 21:34:01 +03:00
dependabot[bot]
c5647b9d39
Bump eslint-plugin-yaml from 1.0.3 to 1.1.2 (#452)
Bumps [eslint-plugin-yaml](https://github.com/aminya/eslint-plugin-yaml) from 1.0.3 to 1.1.2.
- [Release notes](https://github.com/aminya/eslint-plugin-yaml/releases)
- [Commits](https://github.com/aminya/eslint-plugin-yaml/compare/v1.0.3...v1.1.2)

---
updated-dependencies:
- dependency-name: eslint-plugin-yaml
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 21:33:29 +03:00
dependabot[bot]
4220343b66
Bump @typescript-eslint/eslint-plugin from 8.27.0 to 8.28.0 (#437)
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 8.27.0 to 8.28.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.28.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 21:33:11 +03:00
dependabot[bot]
bd7ab44654
Bump @types/node from 22.13.12 to 22.13.14 (#438)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.13.12 to 22.13.14.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 21:32:37 +03:00
dependabot[bot]
e7588b401a
Bump vite from 6.2.3 to 6.2.4 in the npm_and_yarn group (#454)
Bumps the npm_and_yarn group with 1 update: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `vite` from 6.2.3 to 6.2.4
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.2.4/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.2.4/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 21:32:02 +03:00
dependabot[bot]
24c60f7ff0
Bump ra-language-french from 5.6.4 to 5.7.0 (#442)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.6.4 to 5.7.0.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.6.4...v5.7.0)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 21:31:42 +03:00
dependabot[bot]
f28e389336
Bump react-admin from 5.6.4 to 5.7.0 (#445)
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.6.4 to 5.7.0.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.6.4...v5.7.0)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-31 21:28:44 +03:00
dependabot[bot]
86a87e7727
Bump vite from 6.2.2 to 6.2.3 in the npm_and_yarn group (#434)
Bumps the npm_and_yarn group with 1 update: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `vite` from 6.2.2 to 6.2.3
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v6.2.3/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.2.3/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-25 17:25:24 +02:00
dependabot[bot]
d9cf56a6ce
Bump ts-jest from 29.2.6 to 29.3.0 (#431)
Bumps [ts-jest](https://github.com/kulshekhar/ts-jest) from 29.2.6 to 29.3.0.
- [Release notes](https://github.com/kulshekhar/ts-jest/releases)
- [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/kulshekhar/ts-jest/compare/v29.2.6...v29.3.0)

---
updated-dependencies:
- dependency-name: ts-jest
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-24 11:27:43 +02:00
dependabot[bot]
e398d518c2
Bump react-router-dom from 7.3.0 to 7.4.0 (#418)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 7.3.0 to 7.4.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.4.0/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-24 11:25:56 +02:00
dependabot[bot]
6d1856c222
Bump react-router from 7.3.0 to 7.4.0 (#426)
Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) from 7.3.0 to 7.4.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@7.4.0/packages/react-router)

---
updated-dependencies:
- dependency-name: react-router
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-24 11:22:11 +02:00
dependabot[bot]
25be29910e
Bump @tanstack/react-query from 5.68.0 to 5.69.0 (#422)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.68.0 to 5.69.0.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.69.0/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-24 11:17:01 +02:00
dependabot[bot]
17e7891d0a
Bump ra-language-french from 5.6.3 to 5.6.4 (#423)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.6.3 to 5.6.4.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.6.3...v5.6.4)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-24 11:16:46 +02:00
dependabot[bot]
f427255554
Bump eslint-plugin-prettier from 5.2.3 to 5.2.4 (#421)
Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.2.3 to 5.2.4.
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.2.3...v5.2.4)

---
updated-dependencies:
- dependency-name: eslint-plugin-prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-24 11:16:29 +02:00
dependabot[bot]
215a882281
Bump typescript-eslint from 8.26.1 to 8.27.0 (#415)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.26.1 to 8.27.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.27.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-24 11:12:50 +02:00
dependabot[bot]
4103c65415
Bump @mui/material from 6.4.7 to 6.4.8 (#424)
Bumps [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) from 6.4.7 to 6.4.8.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/v6.4.8/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.4.8/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-24 11:10:35 +02:00
dependabot[bot]
d5cee75535
Bump @types/node from 22.13.10 to 22.13.12 (#425)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.13.10 to 22.13.12.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-24 11:10:15 +02:00
dependabot[bot]
d8173f160d
Bump @types/react from 19.0.10 to 19.0.12 (#427)
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.0.10 to 19.0.12.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-24 11:10:01 +02:00
dependabot[bot]
fd0cf318dd
Bump @typescript-eslint/parser from 8.26.1 to 8.27.0 (#432)
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 8.26.1 to 8.27.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.27.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-24 11:09:46 +02:00
dependabot[bot]
978eeafeaa
Bump eslint from 9.22.0 to 9.23.0 (#430)
Bumps [eslint](https://github.com/eslint/eslint) from 9.22.0 to 9.23.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.22.0...v9.23.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-24 11:09:23 +02:00
dependabot[bot]
9907c0e0e9
Bump react-admin from 5.6.3 to 5.6.4 (#416)
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.6.3 to 5.6.4.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.6.3...v5.6.4)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-03-24 11:08:34 +02:00
Borislav Pantaleev
7af2831be8
Make bulk registration CSV import more user-friendly (#411)
* Refactor CSV import

* Finish refactoring

* Add types file

* update readme
2025-03-21 20:29:07 +02:00
Aine
28043dc2ca
do not show Server Status menu entry unless it is actually enabled, fixes #412 2025-03-18 13:35:16 +02:00
Aine
52d0f936d7
Merge pull request #410 from etkecc/dependabot/npm_and_yarn/npm_and_yarn-2c631a4876
Bump @babel/runtime from 7.26.7 to 7.26.10 in the npm_and_yarn group
2025-03-17 09:59:35 +00:00
dependabot[bot]
087f098b29
Bump @babel/runtime from 7.26.7 to 7.26.10 in the npm_and_yarn group
Bumps the npm_and_yarn group with 1 update: [@babel/runtime](https://github.com/babel/babel/tree/HEAD/packages/babel-runtime).


Updates `@babel/runtime` from 7.26.7 to 7.26.10
- [Release notes](https://github.com/babel/babel/releases)
- [Changelog](https://github.com/babel/babel/blob/main/CHANGELOG.md)
- [Commits](https://github.com/babel/babel/commits/v7.26.10/packages/babel-runtime)

---
updated-dependencies:
- dependency-name: "@babel/runtime"
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-17 09:58:29 +00:00
Aine
2eaf5a8bf0
Merge pull request #409 from etkecc/dependabot/npm_and_yarn/tanstack/react-query-5.68.0
Bump @tanstack/react-query from 5.67.2 to 5.68.0
2025-03-17 09:44:26 +00:00
Aine
7b1445ee4a
Merge pull request #406 from etkecc/dependabot/npm_and_yarn/vite-6.2.2
Bump vite from 6.2.1 to 6.2.2
2025-03-17 09:44:09 +00:00
dependabot[bot]
934424e6f1
Bump vite from 6.2.1 to 6.2.2
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.1 to 6.2.2.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.2.2/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-17 09:43:09 +00:00
Aine
872f2fb7a2
Merge pull request #405 from etkecc/dependabot/npm_and_yarn/typescript-eslint-8.26.1
Bump typescript-eslint from 8.26.0 to 8.26.1
2025-03-17 09:41:02 +00:00
dependabot[bot]
756d1c018c
Bump @tanstack/react-query from 5.67.2 to 5.68.0
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.67.2 to 5.68.0.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.68.0/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-17 07:43:39 +00:00
dependabot[bot]
a2c6482d68
Bump typescript-eslint from 8.26.0 to 8.26.1
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.26.0 to 8.26.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.26.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-17 07:42:23 +00:00
Aine
4d726ec97e
do not set guests filter by default, fixes #404 2025-03-14 22:25:18 +02:00
Aine
df618441b7
Merge pull request #392 from etkecc/dependabot/npm_and_yarn/react-router-dom-7.3.0
Bump react-router-dom from 7.2.0 to 7.3.0
2025-03-10 09:56:44 +00:00
dependabot[bot]
0c9a6a6515
Bump react-router-dom from 7.2.0 to 7.3.0
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 7.2.0 to 7.3.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.3.0/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 09:55:46 +00:00
Aine
8640d1357f
Merge pull request #391 from etkecc/dependabot/npm_and_yarn/react-router-7.3.0
Bump react-router from 7.2.0 to 7.3.0
2025-03-10 09:53:27 +00:00
Aine
35eab88465
add missing translations 2025-03-10 11:53:05 +02:00
Aine
f5ce8246a6
Merge pull request #397 from etkecc/dependabot/npm_and_yarn/typescript-5.8.2
Bump typescript from 5.7.3 to 5.8.2
2025-03-10 09:45:56 +00:00
Aine
b7b5392693
Merge pull request #395 from etkecc/dependabot/npm_and_yarn/eslint-9.22.0
Bump eslint from 9.21.0 to 9.22.0
2025-03-10 09:45:37 +00:00
dependabot[bot]
f6050616bf
Bump eslint from 9.21.0 to 9.22.0
Bumps [eslint](https://github.com/eslint/eslint) from 9.21.0 to 9.22.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.21.0...v9.22.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 09:44:16 +00:00
Aine
0d2cbf3554
Merge pull request #396 from etkecc/dependabot/npm_and_yarn/eslint/js-9.22.0
Bump @eslint/js from 9.21.0 to 9.22.0
2025-03-10 09:42:01 +00:00
Aine
88923aaa2c
Merge pull request #403 from etkecc/dependabot/npm_and_yarn/mui/icons-material-6.4.7
Bump @mui/icons-material from 6.4.5 to 6.4.7
2025-03-10 09:41:40 +00:00
dependabot[bot]
ae83cb0fdf
Bump react-router from 7.2.0 to 7.3.0
Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) from 7.2.0 to 7.3.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@7.3.0/packages/react-router)

---
updated-dependencies:
- dependency-name: react-router
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 09:40:37 +00:00
dependabot[bot]
c678253af5
Bump @mui/icons-material from 6.4.5 to 6.4.7
Bumps [@mui/icons-material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-icons-material) from 6.4.5 to 6.4.7.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/v6.4.7/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.4.7/packages/mui-icons-material)

---
updated-dependencies:
- dependency-name: "@mui/icons-material"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 09:40:36 +00:00
dependabot[bot]
a7a486790d
Bump typescript from 5.7.3 to 5.8.2
Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.7.3 to 5.8.2.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.7.3...v5.8.2)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 09:40:31 +00:00
Aine
7894d58aef
Merge pull request #388 from etkecc/dependabot/npm_and_yarn/ra-language-french-5.6.3
Bump ra-language-french from 5.6.2 to 5.6.3
2025-03-10 09:39:15 +00:00
Aine
23dbf6d144
Merge pull request #398 from etkecc/dependabot/npm_and_yarn/mui/material-6.4.7
Bump @mui/material from 6.4.6 to 6.4.7
2025-03-10 09:37:40 +00:00
Aine
3d22e607d6
Merge pull request #401 from etkecc/dependabot/npm_and_yarn/types/node-22.13.10
Bump @types/node from 22.13.8 to 22.13.10
2025-03-10 09:37:23 +00:00
Aine
5e384b72ff
Merge pull request #389 from etkecc/dependabot/npm_and_yarn/eslint-config-prettier-10.1.1
Bump eslint-config-prettier from 10.0.2 to 10.1.1
2025-03-10 09:37:09 +00:00
Aine
313e1fc5f4
Merge pull request #393 from etkecc/dependabot/npm_and_yarn/tanstack/react-query-5.67.2
Bump @tanstack/react-query from 5.67.1 to 5.67.2
2025-03-10 09:36:52 +00:00
Aine
4b8f9da72b
Merge pull request #399 from etkecc/dependabot/npm_and_yarn/react-admin-5.6.3
Bump react-admin from 5.6.2 to 5.6.3
2025-03-10 09:36:36 +00:00
Aine
70ad60f198
Merge pull request #402 from etkecc/dependabot/npm_and_yarn/vite-6.2.1
Bump vite from 6.2.0 to 6.2.1
2025-03-10 09:36:14 +00:00
dependabot[bot]
94c27bb399
Bump vite from 6.2.0 to 6.2.1
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.2.0 to 6.2.1.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/create-vite@6.2.1/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 07:20:00 +00:00
dependabot[bot]
35e1f09d0f
Bump @types/node from 22.13.8 to 22.13.10
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.13.8 to 22.13.10.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 07:19:52 +00:00
dependabot[bot]
91556561bb
Bump react-admin from 5.6.2 to 5.6.3
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.6.2 to 5.6.3.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.6.2...v5.6.3)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 07:19:36 +00:00
dependabot[bot]
e9d0a3f595
Bump @mui/material from 6.4.6 to 6.4.7
Bumps [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) from 6.4.6 to 6.4.7.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/v6.4.7/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.4.7/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 07:19:27 +00:00
dependabot[bot]
1fe94d1b9e
Bump @eslint/js from 9.21.0 to 9.22.0
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.21.0 to 9.22.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.22.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 07:19:09 +00:00
dependabot[bot]
188701f4f1
Bump @tanstack/react-query from 5.67.1 to 5.67.2
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.67.1 to 5.67.2.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.67.2/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 07:18:40 +00:00
dependabot[bot]
1743142a8a
Bump eslint-config-prettier from 10.0.2 to 10.1.1
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 10.0.2 to 10.1.1.
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v10.0.2...v10.1.1)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 07:17:41 +00:00
dependabot[bot]
87afed97b9
Bump ra-language-french from 5.6.2 to 5.6.3
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.6.2 to 5.6.3.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.6.2...v5.6.3)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 07:17:34 +00:00
Aine
4404840b16
Merge pull request #365 from etkecc/add-etke-server-commands
Add etke server commands panel inside server status page
2025-03-05 13:04:41 +00:00
Borislav Pantaleev
ad8aa21dc2 cleanup 2025-03-05 14:53:47 +02:00
Aine
2eb0f804ee
update docs 2025-03-05 14:16:18 +02:00
Aine
73028da430
add docs 2025-03-05 14:14:41 +02:00
Borislav Pantaleev
9fd7290757 Set server command manually for commands with_lock 2025-03-04 23:43:18 +02:00
Aine
f7f2b5f447
Merge branch 'main' into add-etke-server-commands 2025-03-04 22:54:00 +02:00
Aine
71d281a59f
fix translations 2025-03-03 20:27:05 +02:00
Aine
9111863889
Merge pull request #368 from etkecc/dependabot/npm_and_yarn/vite-6.2.0
Bump vite from 6.1.1 to 6.2.0
2025-03-03 18:22:41 +00:00
Aine
ddfb092c65
Merge pull request #383 from etkecc/dependabot/npm_and_yarn/tanstack/react-query-5.67.1
Bump @tanstack/react-query from 5.66.9 to 5.67.1
2025-03-03 18:22:21 +00:00
dependabot[bot]
d6a7db9540
Bump @tanstack/react-query from 5.66.9 to 5.67.1
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.66.9 to 5.67.1.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.67.1/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 18:22:11 +00:00
Aine
0158250a15
Merge pull request #373 from etkecc/dependabot/npm_and_yarn/ra-language-french-5.6.2
Bump ra-language-french from 5.6.1 to 5.6.2
2025-03-03 18:22:07 +00:00
Aine
b041141816
Merge pull request #380 from etkecc/dependabot/npm_and_yarn/react-admin-5.6.2
Bump react-admin from 5.6.1 to 5.6.2
2025-03-03 18:19:57 +00:00
dependabot[bot]
02864a5625
Bump vite from 6.1.1 to 6.2.0
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.1.1 to 6.2.0.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/create-vite@6.2.0/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 18:17:17 +00:00
Aine
7656aa88ff
Merge pull request #378 from etkecc/dependabot/npm_and_yarn/eslint-config-prettier-10.0.2
Bump eslint-config-prettier from 10.0.1 to 10.0.2
2025-03-03 18:15:42 +00:00
Aine
ddf584fec5
Merge pull request #382 from etkecc/dependabot/npm_and_yarn/typescript-eslint-8.26.0
Bump typescript-eslint from 8.24.1 to 8.26.0
2025-03-03 18:15:09 +00:00
Aine
260345ce79
Merge pull request #376 from etkecc/dependabot/npm_and_yarn/types/lodash-4.17.16
Bump @types/lodash from 4.17.15 to 4.17.16
2025-03-03 18:14:45 +00:00
dependabot[bot]
1d7bb4bde9
Bump @types/lodash from 4.17.15 to 4.17.16
Bumps [@types/lodash](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash) from 4.17.15 to 4.17.16.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash)

---
updated-dependencies:
- dependency-name: "@types/lodash"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 18:14:08 +00:00
dependabot[bot]
fc320e3290
Bump typescript-eslint from 8.24.1 to 8.26.0
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.24.1 to 8.26.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.26.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 18:13:58 +00:00
Aine
3df050af5c
Merge pull request #371 from etkecc/dependabot/npm_and_yarn/mui/material-6.4.6
Bump @mui/material from 6.4.5 to 6.4.6
2025-03-03 18:12:06 +00:00
Aine
8088e06351
Merge pull request #370 from etkecc/dependabot/npm_and_yarn/prettier-3.5.3
Bump prettier from 3.5.2 to 3.5.3
2025-03-03 18:11:44 +00:00
Aine
4683eacf1c
Merge pull request #367 from etkecc/dependabot/npm_and_yarn/types/node-22.13.8
Bump @types/node from 22.13.5 to 22.13.8
2025-03-03 18:11:26 +00:00
dependabot[bot]
46db0e5b3d
Bump react-admin from 5.6.1 to 5.6.2
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.6.1 to 5.6.2.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.6.1...v5.6.2)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 07:46:40 +00:00
dependabot[bot]
d495fa6052
Bump eslint-config-prettier from 10.0.1 to 10.0.2
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 10.0.1 to 10.0.2.
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v10.0.1...v10.0.2)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 07:46:21 +00:00
dependabot[bot]
04ea1c4192
Bump ra-language-french from 5.6.1 to 5.6.2
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.6.1 to 5.6.2.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.6.1...v5.6.2)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 07:45:45 +00:00
dependabot[bot]
c7e3c26819
Bump @mui/material from 6.4.5 to 6.4.6
Bumps [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) from 6.4.5 to 6.4.6.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/v6.4.6/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.4.6/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 07:45:18 +00:00
dependabot[bot]
d910c7000a
Bump prettier from 3.5.2 to 3.5.3
Bumps [prettier](https://github.com/prettier/prettier) from 3.5.2 to 3.5.3.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.5.2...3.5.3)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 07:45:07 +00:00
dependabot[bot]
fcff225cbd
Bump @types/node from 22.13.5 to 22.13.8
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.13.5 to 22.13.8.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-03 07:44:16 +00:00
Borislav Pantaleev
092d8109b0 Add args param to run command 2025-02-27 21:31:58 +02:00
Borislav Pantaleev
a8f5f917dd reverse order of notifications so it's ASC 2025-02-27 20:16:30 +02:00
Borislav Pantaleev
ee7aa12fd0 burst cache for status, lock, notifications if command is running 2025-02-27 00:06:01 +02:00
Borislav Pantaleev
201da84967 Fix handling of date string that are ISO formatted 2025-02-27 00:03:01 +02:00
Borislav Pantaleev
341c9950f7 Fix notifications ASC order and proper display of time since 2025-02-26 23:25:05 +02:00
Borislav Pantaleev
233c50571b Move Server Status on top of Sidebar and fix icon background 2025-02-26 22:51:18 +02:00
Borislav Pantaleev
c080f72062 Fix tooltip for ServerStatusBadge 2025-02-25 23:08:11 +02:00
Borislav Pantaleev
79c46c2f46 Add ServerCommandsPanel to ServerStatusPage 2025-02-25 23:03:49 +02:00
Aine
0f4def5c46
Merge pull request #348 from etkecc/dependabot/npm_and_yarn/react-router-dom-7.2.0
Bump react-router-dom from 7.1.5 to 7.2.0
2025-02-24 08:24:30 +00:00
dependabot[bot]
21e90f65e6
Bump react-router-dom from 7.1.5 to 7.2.0
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 7.1.5 to 7.2.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@7.2.0/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 08:22:57 +00:00
Aine
a412cebe72
Merge pull request #349 from etkecc/dependabot/npm_and_yarn/react-router-7.2.0
Bump react-router from 7.1.5 to 7.2.0
2025-02-24 08:20:47 +00:00
Aine
ab179e3aa4
Merge pull request #351 from etkecc/dependabot/npm_and_yarn/ra-language-french-5.6.1
Bump ra-language-french from 5.5.3 to 5.6.1
2025-02-24 08:18:28 +00:00
Aine
75af43bb11
Merge pull request #364 from etkecc/dependabot/npm_and_yarn/mui/icons-material-6.4.5
Bump @mui/icons-material from 6.4.3 to 6.4.5
2025-02-24 08:16:56 +00:00
dependabot[bot]
a0607aa80d
Bump @mui/icons-material from 6.4.3 to 6.4.5
Bumps [@mui/icons-material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-icons-material) from 6.4.3 to 6.4.5.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/v6.4.5/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.4.5/packages/mui-icons-material)

---
updated-dependencies:
- dependency-name: "@mui/icons-material"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 08:16:12 +00:00
dependabot[bot]
03711516da
Bump react-router from 7.1.5 to 7.2.0
Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) from 7.1.5 to 7.2.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@7.2.0/packages/react-router)

---
updated-dependencies:
- dependency-name: react-router
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 08:15:19 +00:00
Aine
ce23c82de4
Merge pull request #357 from etkecc/dependabot/npm_and_yarn/mui/material-6.4.5
Bump @mui/material from 6.4.4 to 6.4.5
2025-02-24 08:13:46 +00:00
dependabot[bot]
9dda3b7836
Bump @mui/material from 6.4.4 to 6.4.5
Bumps [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) from 6.4.4 to 6.4.5.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/v6.4.5/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.4.5/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 08:12:51 +00:00
Aine
45c861a530
Merge pull request #355 from etkecc/dependabot/npm_and_yarn/react-admin-5.6.1
Bump react-admin from 5.5.3 to 5.6.1
2025-02-24 08:11:05 +00:00
Aine
a1dc9379c7
Merge pull request #361 from etkecc/dependabot/npm_and_yarn/tanstack/react-query-5.66.9
Bump @tanstack/react-query from 5.66.5 to 5.66.9
2025-02-24 08:08:38 +00:00
Aine
373ba87de5
fix tests 2025-02-24 10:08:24 +02:00
Aine
21fac8576f
Merge pull request #358 from etkecc/dependabot/npm_and_yarn/ts-jest-29.2.6
Bump ts-jest from 29.2.5 to 29.2.6
2025-02-24 08:01:49 +00:00
Aine
b5b39df212
Merge pull request #354 from etkecc/dependabot/npm_and_yarn/vite-6.1.1
Bump vite from 6.1.0 to 6.1.1
2025-02-24 08:01:26 +00:00
dependabot[bot]
a658856724
Bump vite from 6.1.0 to 6.1.1
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.1.0 to 6.1.1.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/create-vite@6.1.1/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 07:54:09 +00:00
dependabot[bot]
dd8ade8843
Bump ts-jest from 29.2.5 to 29.2.6
Bumps [ts-jest](https://github.com/kulshekhar/ts-jest) from 29.2.5 to 29.2.6.
- [Release notes](https://github.com/kulshekhar/ts-jest/releases)
- [Changelog](https://github.com/kulshekhar/ts-jest/blob/main/CHANGELOG.md)
- [Commits](https://github.com/kulshekhar/ts-jest/compare/v29.2.5...v29.2.6)

---
updated-dependencies:
- dependency-name: ts-jest
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 07:53:56 +00:00
Aine
ae8f4a9722
Merge pull request #359 from etkecc/dependabot/npm_and_yarn/eslint-9.21.0
Bump eslint from 9.20.1 to 9.21.0
2025-02-24 07:52:07 +00:00
Aine
d5100b57c7
Merge pull request #360 from etkecc/dependabot/npm_and_yarn/prettier-3.5.2
Bump prettier from 3.5.1 to 3.5.2
2025-02-24 07:51:52 +00:00
Aine
dc9da147a9
Merge pull request #362 from etkecc/dependabot/npm_and_yarn/types/node-22.13.5
Bump @types/node from 22.13.4 to 22.13.5
2025-02-24 07:51:31 +00:00
dependabot[bot]
dd0668daee
Bump @types/node from 22.13.4 to 22.13.5
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.13.4 to 22.13.5.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 07:48:35 +00:00
dependabot[bot]
3fda89462d
Bump @tanstack/react-query from 5.66.5 to 5.66.9
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.66.5 to 5.66.9.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.66.9/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 07:48:26 +00:00
dependabot[bot]
4fa0ce111b
Bump prettier from 3.5.1 to 3.5.2
Bumps [prettier](https://github.com/prettier/prettier) from 3.5.1 to 3.5.2.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.5.1...3.5.2)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 07:48:13 +00:00
dependabot[bot]
37c208a965
Bump eslint from 9.20.1 to 9.21.0
Bumps [eslint](https://github.com/eslint/eslint) from 9.20.1 to 9.21.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.20.1...v9.21.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 07:48:05 +00:00
dependabot[bot]
cbebe2d8de
Bump react-admin from 5.5.3 to 5.6.1
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.5.3 to 5.6.1.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.5.3...v5.6.1)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 07:47:07 +00:00
dependabot[bot]
9d43a45c5c
Bump ra-language-french from 5.5.3 to 5.6.1
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.5.3 to 5.6.1.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.5.3...v5.6.1)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-24 07:46:24 +00:00
Aine
fbb578392d
better UI signal when deleting server notifications from the appbar icon 2025-02-18 11:28:38 +02:00
Aine
84c14f6de2
Merge pull request #343 from etkecc/dependabot/npm_and_yarn/tanstack/react-query-5.66.5
Bump @tanstack/react-query from 5.66.0 to 5.66.5
2025-02-18 09:18:44 +00:00
Aine
b6b58e0f02
Merge pull request #345 from etkecc/dependabot/npm_and_yarn/types/react-19.0.10
Bump @types/react from 19.0.8 to 19.0.10
2025-02-18 09:14:53 +00:00
dependabot[bot]
9f764006af
Bump @types/react from 19.0.8 to 19.0.10
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.0.8 to 19.0.10.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-18 08:40:23 +00:00
Aine
57ab59514c
Merge pull request #347 from etkecc/dependabot/npm_and_yarn/typescript-eslint-8.24.1
Bump typescript-eslint from 8.23.0 to 8.24.1
2025-02-18 08:38:07 +00:00
dependabot[bot]
97103cdac3
Bump typescript-eslint from 8.23.0 to 8.24.1
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.23.0 to 8.24.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.24.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-18 08:33:51 +00:00
dependabot[bot]
711cf243a7
Bump @tanstack/react-query from 5.66.0 to 5.66.5
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.66.0 to 5.66.5.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.66.5/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-18 08:33:20 +00:00
Aine
565877a173
Merge pull request #334 from etkecc/dependabot/npm_and_yarn/types/react-19.0.9
Bump @types/react from 19.0.8 to 19.0.9
2025-02-18 08:32:47 +00:00
Aine
b3681ee007
Merge pull request #337 from etkecc/dependabot/npm_and_yarn/typescript-eslint/parser-8.24.0
Bump @typescript-eslint/parser from 8.23.0 to 8.24.0
2025-02-18 08:32:12 +00:00
Aine
07ec25cb5f
Merge pull request #339 from etkecc/dependabot/npm_and_yarn/types/node-22.13.4
Bump @types/node from 22.13.1 to 22.13.4
2025-02-18 08:31:48 +00:00
Aine
0f80366f6c
Merge pull request #340 from etkecc/dependabot/npm_and_yarn/prettier-3.5.1
Bump prettier from 3.5.0 to 3.5.1
2025-02-18 08:31:33 +00:00
Aine
32f53a6d72
Merge pull request #341 from etkecc/dependabot/npm_and_yarn/eslint-9.20.1
Bump eslint from 9.20.0 to 9.20.1
2025-02-18 08:31:17 +00:00
Aine
c22e6f0cb7
Merge pull request #342 from etkecc/dependabot/npm_and_yarn/mui/material-6.4.4
Bump @mui/material from 6.4.3 to 6.4.4
2025-02-18 08:31:02 +00:00
dependabot[bot]
672355c21c
Bump @mui/material from 6.4.3 to 6.4.4
Bumps [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) from 6.4.3 to 6.4.4.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/v6.4.4/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.4.4/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 07:51:06 +00:00
dependabot[bot]
187052e603
Bump eslint from 9.20.0 to 9.20.1
Bumps [eslint](https://github.com/eslint/eslint) from 9.20.0 to 9.20.1.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.20.0...v9.20.1)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 07:50:35 +00:00
dependabot[bot]
6a1c4949d7
Bump prettier from 3.5.0 to 3.5.1
Bumps [prettier](https://github.com/prettier/prettier) from 3.5.0 to 3.5.1.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.5.0...3.5.1)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 07:50:27 +00:00
dependabot[bot]
9dc1af3dd1
Bump @types/node from 22.13.1 to 22.13.4
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.13.1 to 22.13.4.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 07:50:20 +00:00
dependabot[bot]
7c30d76f42
Bump @typescript-eslint/parser from 8.23.0 to 8.24.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 8.23.0 to 8.24.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.24.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 07:49:58 +00:00
dependabot[bot]
5842ae5d6c
Bump @types/react from 19.0.8 to 19.0.9
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 19.0.8 to 19.0.9.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 07:49:15 +00:00
Aine
7d97ed90c9
add room ID column to the rooms table 2025-02-13 22:48:34 +02:00
Aine
e05ca5ba0b
Merge pull request #329 from etkecc/dependabot/npm_and_yarn/types/react-19.0.8
Bump @types/react from 18.3.18 to 19.0.8
2025-02-10 11:38:40 +00:00
Aine
8360243e2b
Merge pull request #331 from etkecc/dependabot/npm_and_yarn/eslint-9.20.0
Bump eslint from 9.19.0 to 9.20.0
2025-02-10 11:20:46 +00:00
Aine
65c1bff4b3
Merge pull request #332 from etkecc/dependabot/npm_and_yarn/prettier-3.5.0
Bump prettier from 3.4.2 to 3.5.0
2025-02-10 11:20:34 +00:00
Aine
3ef6dfdbdd
Merge pull request #333 from etkecc/dependabot/npm_and_yarn/vite-6.1.0
Bump vite from 6.0.11 to 6.1.0
2025-02-10 11:19:50 +00:00
dependabot[bot]
72ba4cded3
Bump vite from 6.0.11 to 6.1.0
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.0.11 to 6.1.0.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/create-vite@6.1.0/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 07:17:00 +00:00
dependabot[bot]
817572c841
Bump prettier from 3.4.2 to 3.5.0
Bumps [prettier](https://github.com/prettier/prettier) from 3.4.2 to 3.5.0.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.4.2...3.5.0)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 07:16:41 +00:00
dependabot[bot]
5437fcb7ae
Bump eslint from 9.19.0 to 9.20.0
Bumps [eslint](https://github.com/eslint/eslint) from 9.19.0 to 9.20.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.19.0...v9.20.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 07:16:26 +00:00
dependabot[bot]
2d785d1fd9
Bump @types/react from 18.3.18 to 19.0.8
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.3.18 to 19.0.8.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-10 07:16:05 +00:00
Aine
80a8d09b77
Merge pull request #328 from etkecc/161-speed-up-large-profiles
Add manual pagination to Rooms tab in User's profile
2025-02-07 21:11:22 +00:00
Borislav Pantaleev
6fe9be463c remove conosle.log 2025-02-07 22:01:31 +02:00
Aine
04e8862128
change perPage of user's rooms to 10, to keep it in sync with media 2025-02-05 12:03:33 +02:00
Borislav Pantaleev
e394193abb Fix cache key again 2025-02-04 23:24:35 +02:00
Borislav Pantaleev
0024bf78d5 remove console.log 2025-02-04 23:20:14 +02:00
Borislav Pantaleev
fd67f7d7d7 Fix caching key 2025-02-04 23:19:12 +02:00
Borislav Pantaleev
3325b0407f revert status interval 2025-02-04 23:14:24 +02:00
Borislav Pantaleev
3e9bfb605c Add manual pagination to Rooms tab in User's profile 2025-02-04 23:13:43 +02:00
Aine
95ab9587c9
Merge pull request #327 from etkecc/update-deps
Update react, react-dom, react-is, ts-jest-mock-import-meta
2025-02-04 20:30:25 +00:00
Borislav Pantaleev
b7e308fe85 Update react, react-dom, react-is, ts-jest-mock-import-meta 2025-02-04 22:06:48 +02:00
Aine
e272d0eb17
Merge pull request #323 from etkecc/dependabot/npm_and_yarn/tanstack/react-query-5.66.0
Bump @tanstack/react-query from 5.65.1 to 5.66.0
2025-02-04 08:49:00 +00:00
dependabot[bot]
1a6c6ffd10
Bump @tanstack/react-query from 5.65.1 to 5.66.0
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.65.1 to 5.66.0.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.66.0/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-04 08:47:01 +00:00
Aine
7f03f5423d
Merge pull request #322 from etkecc/dependabot/npm_and_yarn/types/node-22.13.0
Bump @types/node from 22.12.0 to 22.13.0
2025-02-04 08:44:51 +00:00
Aine
bcc73c59f8
Merge pull request #325 from etkecc/dependabot/npm_and_yarn/mui/utils-6.4.2
Bump @mui/utils from 5.16.14 to 6.4.2
2025-02-04 08:44:21 +00:00
Aine
fcacd0f09f
Merge pull request #326 from etkecc/dependabot/npm_and_yarn/ra-language-russian-5.4.3
Bump ra-language-russian from 4.14.2 to 5.4.3
2025-02-04 08:44:06 +00:00
dependabot[bot]
586dd5cdfc
Bump ra-language-russian from 4.14.2 to 5.4.3
Bumps [ra-language-russian](https://github.com/Klucherev/ra-language-russian) from 4.14.2 to 5.4.3.
- [Commits](https://github.com/Klucherev/ra-language-russian/commits)

---
updated-dependencies:
- dependency-name: ra-language-russian
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 07:36:04 +00:00
dependabot[bot]
bbbaed259d
Bump @mui/utils from 5.16.14 to 6.4.2
Bumps [@mui/utils](https://github.com/mui/material-ui/tree/HEAD/packages/mui-utils) from 5.16.14 to 6.4.2.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/v6.4.2/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.4.2/packages/mui-utils)

---
updated-dependencies:
- dependency-name: "@mui/utils"
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 07:35:58 +00:00
dependabot[bot]
db77c22f9c
Bump @types/node from 22.12.0 to 22.13.0
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.12.0 to 22.13.0.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 07:34:58 +00:00
Aine
8680dbc268
wrap MakeAdmin button with ReferenceField in user's rooms table, fixes #321 2025-01-30 18:35:35 +02:00
Aine
ea2b84c5dc
Merge pull request #320 from etkecc/broken-upgrade
Broken upgrade (now fixed)
2025-01-30 09:12:07 +00:00
Borislav Pantaleev
45c7027d3c Fix tests 2025-01-30 09:43:46 +02:00
Aine
62017d4f4e
Merge branch 'main' into broken-upgrade 2025-01-28 11:51:26 +02:00
Aine
0d7dcdc284
revisit traefik labels in readme, fixes #303 2025-01-28 11:46:19 +02:00
Aine
0eb3b77bc5
fix translations; fix tests 2025-01-27 13:09:37 +02:00
dependabot[bot]
e2fba4bbdd
Bump @types/node from 22.10.7 to 22.10.10 (#304)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.10.7 to 22.10.10.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 12:49:05 +02:00
dependabot[bot]
6425a6bfc4
Bump vite from 6.0.9 to 6.0.11 (#307)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.0.9 to 6.0.11.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.0.11/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 12:48:52 +02:00
dependabot[bot]
42925e8a7c
Bump eslint from 9.18.0 to 9.19.0 (#311)
Bumps [eslint](https://github.com/eslint/eslint) from 9.18.0 to 9.19.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.18.0...v9.19.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 12:48:32 +02:00
dependabot[bot]
75e89fe628
Bump ra-language-french from 5.4.4 to 5.5.2 (#305)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.4.4 to 5.5.2.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.4.4...v5.5.2)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 12:30:36 +02:00
dependabot[bot]
f9c806d292
Bump @testing-library/user-event from 14.6.0 to 14.6.1 (#308)
Bumps [@testing-library/user-event](https://github.com/testing-library/user-event) from 14.6.0 to 14.6.1.
- [Release notes](https://github.com/testing-library/user-event/releases)
- [Changelog](https://github.com/testing-library/user-event/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/user-event/compare/v14.6...v14.6.1)

---
updated-dependencies:
- dependency-name: "@testing-library/user-event"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 12:30:11 +02:00
dependabot[bot]
3f5022d515
Bump typescript-eslint from 8.20.0 to 8.21.0 (#312)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.20.0 to 8.21.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.21.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 12:29:51 +02:00
Aine
0748f98d47
revisit traefik labels in readme, fixes #303 2025-01-27 12:29:34 +02:00
dependabot[bot]
3c8fd351a1
Bump @eslint/js from 9.18.0 to 9.19.0 (#313)
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.18.0 to 9.19.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.19.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 12:29:19 +02:00
dependabot[bot]
40e6d80c35
Bump react-admin from 5.4.4 to 5.5.2 (#317)
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.4.4 to 5.5.2.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.4.4...v5.5.2)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-27 12:06:48 +02:00
dependabot[bot]
243cc40da4
Bump vite from 6.0.7 to 6.0.9 in the npm_and_yarn group (#302)
Bumps the npm_and_yarn group with 1 update: [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite).


Updates `vite` from 6.0.7 to 6.0.9
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.0.9/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-22 06:37:53 +00:00
dependabot[bot]
3bcc51d12c
Bump react-admin from 5.4.3 to 5.4.4 (#280)
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.4.3 to 5.4.4.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.4.3...v5.4.4)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:58:51 +02:00
dependabot[bot]
2afd7d6737
Bump react-router-dom from 6.28.1 to 6.28.2 (#282)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.28.1 to 6.28.2.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.28.2/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:48:36 +02:00
dependabot[bot]
2357d63120
Bump @testing-library/user-event from 14.5.2 to 14.6.0 (#285)
Bumps [@testing-library/user-event](https://github.com/testing-library/user-event) from 14.5.2 to 14.6.0.
- [Release notes](https://github.com/testing-library/user-event/releases)
- [Changelog](https://github.com/testing-library/user-event/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/user-event/compare/v14.5.2...v14.6)

---
updated-dependencies:
- dependency-name: "@testing-library/user-event"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:48:23 +02:00
dependabot[bot]
e28d07ebd3
Bump eslint-plugin-prettier from 5.2.1 to 5.2.3 (#281)
Bumps [eslint-plugin-prettier](https://github.com/prettier/eslint-plugin-prettier) from 5.2.1 to 5.2.3.
- [Release notes](https://github.com/prettier/eslint-plugin-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-plugin-prettier/blob/master/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-plugin-prettier/compare/v5.2.1...v5.2.3)

---
updated-dependencies:
- dependency-name: eslint-plugin-prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:46:26 +02:00
dependabot[bot]
33f960579c
Bump ra-language-english from 5.4.3 to 5.4.4 (#283)
Bumps [ra-language-english](https://github.com/marmelab/react-admin) from 5.4.3 to 5.4.4.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.4.3...v5.4.4)

---
updated-dependencies:
- dependency-name: ra-language-english
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:46:05 +02:00
dependabot[bot]
6e14bd7959
Bump ra-language-french from 5.4.3 to 5.4.4 (#284)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.4.3 to 5.4.4.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.4.3...v5.4.4)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:45:52 +02:00
dependabot[bot]
bdbc0df95b
Bump react-router from 6.28.1 to 6.28.2 (#286)
Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) from 6.28.1 to 6.28.2.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@6.28.2/packages/react-router)

---
updated-dependencies:
- dependency-name: react-router
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:45:29 +02:00
dependabot[bot]
5e10d94e5f
Bump @testing-library/react from 16.1.0 to 16.2.0 (#287)
Bumps [@testing-library/react](https://github.com/testing-library/react-testing-library) from 16.1.0 to 16.2.0.
- [Release notes](https://github.com/testing-library/react-testing-library/releases)
- [Changelog](https://github.com/testing-library/react-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/react-testing-library/compare/v16.1.0...v16.2.0)

---
updated-dependencies:
- dependency-name: "@testing-library/react"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:45:15 +02:00
dependabot[bot]
a934942bf6
Bump @tanstack/react-query from 5.62.15 to 5.64.2 (#290)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.62.15 to 5.64.2.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.64.2/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:44:58 +02:00
dependabot[bot]
c440e88806
Bump typescript from 5.7.2 to 5.7.3 (#292)
Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.7.2 to 5.7.3.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.7.2...v5.7.3)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:44:42 +02:00
dependabot[bot]
45b7ec005b
Bump papaparse from 5.4.1 to 5.5.1 (#293)
Bumps [papaparse](https://github.com/mholt/PapaParse) from 5.4.1 to 5.5.1.
- [Release notes](https://github.com/mholt/PapaParse/releases)
- [Commits](https://github.com/mholt/PapaParse/commits)

---
updated-dependencies:
- dependency-name: papaparse
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:44:28 +02:00
dependabot[bot]
c748523dbc
Bump @types/node from 22.10.5 to 22.10.7 (#294)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.10.5 to 22.10.7.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:43:45 +02:00
dependabot[bot]
34eea8dff4
Bump eslint-config-prettier from 9.1.0 to 10.0.1 (#295)
Bumps [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) from 9.1.0 to 10.0.1.
- [Release notes](https://github.com/prettier/eslint-config-prettier/releases)
- [Changelog](https://github.com/prettier/eslint-config-prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/eslint-config-prettier/compare/v9.1.0...v10.0.1)

---
updated-dependencies:
- dependency-name: eslint-config-prettier
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:43:28 +02:00
dependabot[bot]
87408c0e6d
Bump @mui/material from 6.3.1 to 6.4.0 (#296)
Bumps [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) from 6.3.1 to 6.4.0.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.4.0/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:43:02 +02:00
dependabot[bot]
5ad787075c
Bump ra-i18n-polyglot from 5.4.3 to 5.4.4 (#298)
Bumps [ra-i18n-polyglot](https://github.com/marmelab/react-admin) from 5.4.3 to 5.4.4.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.4.3...v5.4.4)

---
updated-dependencies:
- dependency-name: ra-i18n-polyglot
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 11:42:49 +02:00
dependabot[bot]
01ae5a411f
Bump eslint from 9.17.0 to 9.18.0 (#297)
Bumps [eslint](https://github.com/eslint/eslint) from 9.17.0 to 9.18.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.17.0...v9.18.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 10:46:18 +02:00
dependabot[bot]
cde60a2aba
Bump @mui/utils from 5.16.13 to 5.16.14 (#299)
Bumps [@mui/utils](https://github.com/mui/material-ui/tree/HEAD/packages/mui-utils) from 5.16.13 to 5.16.14.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/v5.16.14/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v5.16.14/packages/mui-utils)

---
updated-dependencies:
- dependency-name: "@mui/utils"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 10:45:56 +02:00
dependabot[bot]
3f5808c67b
Bump ra-core from 5.4.3 to 5.4.4 (#300)
Bumps [ra-core](https://github.com/marmelab/react-admin) from 5.4.3 to 5.4.4.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.4.3...v5.4.4)

---
updated-dependencies:
- dependency-name: ra-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 10:45:44 +02:00
dependabot[bot]
2c697b40dd
Bump typescript-eslint from 8.19.0 to 8.20.0 (#301)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.19.0 to 8.20.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.20.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-20 10:45:12 +02:00
Aine
9453490bca
update docker instructions, fixes #278 2025-01-18 09:21:58 +02:00
Aine
0baf6ad94d
try a different approach to #277 2025-01-17 10:38:40 +02:00
Aine
df911c9e97
safer decodeURIComponent(), fixes #277 2025-01-17 09:42:21 +02:00
Borislav Pantaleev
2a5b59002e
Add Users' Account Data tab (#276)
* Add Account Data tab in User edit

* update readme
2025-01-16 11:00:59 +02:00
Aine
44d801a2f5
do not clear hash on replacing history 2025-01-14 14:12:39 +02:00
Hugo Renard
5ed5a88225
fix: extract loginToken using URLSearchParams (#275)
It's more robust than a regex and also works with extras queries.

Signed-off-by: Hugo Renard <hugo.renard@protonmail.com>
2025-01-14 14:01:33 +02:00
Aine
1ca029fe94
add element web to the dev stack 2025-01-13 11:02:31 +02:00
Aine
ddf3298b41
Respect base url when loading config.json (#274)
* Respect base url when loading config.json

* update readme
2025-01-09 22:36:45 +02:00
dependabot[bot]
e66c321ef9
Bump @types/node from 22.10.2 to 22.10.5 (#272)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.10.2 to 22.10.5.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-06 23:55:38 +00:00
dependabot[bot]
c215aa2f25
Bump @mui/icons-material from 6.2.1 to 6.3.1 (#273)
Bumps [@mui/icons-material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-icons-material) from 6.2.1 to 6.3.1.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.3.1/packages/mui-icons-material)

---
updated-dependencies:
- dependency-name: "@mui/icons-material"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-06 23:39:20 +00:00
dependabot[bot]
e1afcd2678
Bump @types/lodash from 4.17.13 to 4.17.14 (#271)
Bumps [@types/lodash](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash) from 4.17.13 to 4.17.14.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash)

---
updated-dependencies:
- dependency-name: "@types/lodash"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-06 23:38:58 +00:00
dependabot[bot]
acd0d6d848
Bump typescript-eslint from 8.18.1 to 8.19.0 (#268)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.18.1 to 8.19.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.19.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-04 21:03:36 +02:00
dependabot[bot]
9491c3ab14
Bump @tanstack/react-query from 5.62.8 to 5.62.15 (#266)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.62.8 to 5.62.15.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/HEAD/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-04 20:55:44 +02:00
dependabot[bot]
2e52d92fce
Bump @mui/material from 6.2.1 to 6.3.1 (#267)
Bumps [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) from 6.2.1 to 6.3.1.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.3.1/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-04 20:55:32 +02:00
dependabot[bot]
a360e38b7f
Bump @typescript-eslint/parser from 8.18.1 to 8.19.0 (#269)
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 8.18.1 to 8.19.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.19.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-04 20:55:15 +02:00
dependabot[bot]
b72ace5adc
Bump vite from 6.0.5 to 6.0.7 (#270)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.0.5 to 6.0.7.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.0.7/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-04 20:55:02 +02:00
dependabot[bot]
c56bd76c73
Bump @typescript-eslint/eslint-plugin from 8.18.1 to 8.18.2 (#263)
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 8.18.1 to 8.18.2.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.18.2/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-04 20:52:20 +02:00
dependabot[bot]
28e4ea0e76
Bump @mui/icons-material from 6.2.0 to 6.2.1 (#264)
Bumps [@mui/icons-material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-icons-material) from 6.2.0 to 6.2.1.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.2.1/packages/mui-icons-material)

---
updated-dependencies:
- dependency-name: "@mui/icons-material"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-04 20:52:08 +02:00
dependabot[bot]
b9de3044be
Bump @mui/utils from 5.16.12 to 5.16.13 (#265)
Bumps [@mui/utils](https://github.com/mui/material-ui/tree/HEAD/packages/mui-utils) from 5.16.12 to 5.16.13.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/v5.16.13/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v5.16.13/packages/mui-utils)

---
updated-dependencies:
- dependency-name: "@mui/utils"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2025-01-04 20:51:57 +02:00
dependabot[bot]
7df67b99a6
Bump typescript-eslint from 8.18.0 to 8.18.1 (#251)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.18.0 to 8.18.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.18.1/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-23 09:00:59 +00:00
dependabot[bot]
f17a245839
Bump @mui/utils from 5.16.8 to 5.16.12 (#254)
Bumps [@mui/utils](https://github.com/mui/material-ui/tree/HEAD/packages/mui-utils) from 5.16.8 to 5.16.12.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/v5.16.12/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v5.16.12/packages/mui-utils)

---
updated-dependencies:
- dependency-name: "@mui/utils"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-23 08:45:19 +00:00
dependabot[bot]
1e1b1b0e80
Bump react-router-dom from 6.28.0 to 6.28.1 (#253)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.28.0 to 6.28.1.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.28.1/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-23 08:45:06 +00:00
dependabot[bot]
0742c64c61
Bump @typescript-eslint/eslint-plugin from 8.18.0 to 8.18.1 (#248)
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 8.18.0 to 8.18.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.18.1/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-23 08:44:44 +00:00
dependabot[bot]
992b3cd266
Bump ra-language-french from 5.4.2 to 5.4.3 (#256)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.4.2 to 5.4.3.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.4.2...v5.4.3)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-23 08:29:39 +00:00
dependabot[bot]
f9a95882e9
Bump @tanstack/react-query from 5.62.7 to 5.62.8 (#249)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.62.7 to 5.62.8.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.62.8/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-23 08:29:03 +00:00
dependabot[bot]
7ca78f9fc5
Bump @typescript-eslint/parser from 8.18.0 to 8.18.1 (#247)
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 8.18.0 to 8.18.1.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.18.1/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-23 08:28:38 +00:00
dependabot[bot]
95950dae86
Bump react-router from 6.28.0 to 6.28.1 (#246)
Bumps [react-router](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router) from 6.28.0 to 6.28.1.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/react-router@6.28.1/packages/react-router/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router@6.28.1/packages/react-router)

---
updated-dependencies:
- dependency-name: react-router
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-23 08:28:20 +00:00
dependabot[bot]
8e83204b34
Bump react-hook-form from 7.54.1 to 7.54.2 (#245)
Bumps [react-hook-form](https://github.com/react-hook-form/react-hook-form) from 7.54.1 to 7.54.2.
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.54.1...v7.54.2)

---
updated-dependencies:
- dependency-name: react-hook-form
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-23 08:28:04 +00:00
dependabot[bot]
328c6b499d
Bump vite from 6.0.3 to 6.0.5 (#244)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 6.0.3 to 6.0.5.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.0.5/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-23 08:12:18 +00:00
dependabot[bot]
af708f5d13
Bump @mui/material from 6.2.0 to 6.2.1 (#242)
Bumps [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) from 6.2.0 to 6.2.1.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.2.1/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-23 08:11:57 +00:00
dependabot[bot]
7629e4b090
Bump react-admin from 5.4.2 to 5.4.3 (#243)
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.4.2 to 5.4.3.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.4.2...v5.4.3)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-23 08:11:30 +00:00
Borislav Pantaleev
c596d38d7a
Add notifications badge and page (#240)
* WIP on server notifications

* WIP: Add server notifications page and removal of notifications

* improve design

* fix missing notifications case; add tooltop

* Fix api response

* fix tests

* add docs; update readme
2024-12-19 11:24:42 +02:00
Aine
c643bdcfce
correctly handle MXIDs with not just-domain server names; update testdata config to include that case by default; fixes #239 2024-12-16 12:53:42 +02:00
Aine
630286a781
use the same protocol for .well-known lookup as in homeserver url from the login form, fixes #238 2024-12-16 12:44:00 +02:00
Aine
71e90c12a7
enable media bulk delete button, fixes #216 2024-12-16 11:51:12 +02:00
Aine
db6594f11f
Merge pull request #237 from etkecc/purge-remote-media
Add "Purge Remote Media" button
2024-12-16 09:31:01 +00:00
Aine
7844987fe0
update readme 2024-12-16 11:30:48 +02:00
Aine
9f2293f9c4
Add "Purge Remote Media" button 2024-12-16 11:25:49 +02:00
Aine
fd4bf7ce5c
Merge pull request #221 from etkecc/dependabot/npm_and_yarn/typescript-eslint-8.18.0
Bump typescript-eslint from 8.17.0 to 8.18.0
2024-12-16 08:50:35 +00:00
Aine
0dc969ce2c
Merge pull request #236 from etkecc/dependabot/npm_and_yarn/mui/icons-material-6.2.0
Bump @mui/icons-material from 6.1.9 to 6.2.0
2024-12-16 08:50:25 +00:00
dependabot[bot]
f5455ef667
Bump @mui/icons-material from 6.1.9 to 6.2.0
Bumps [@mui/icons-material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-icons-material) from 6.1.9 to 6.2.0.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.2.0/packages/mui-icons-material)

---
updated-dependencies:
- dependency-name: "@mui/icons-material"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-16 08:36:21 +00:00
dependabot[bot]
edb8028162
Bump typescript-eslint from 8.17.0 to 8.18.0
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.17.0 to 8.18.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.18.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-16 08:35:55 +00:00
Aine
f415d637e9
Merge pull request #220 from etkecc/dependabot/npm_and_yarn/eslint-9.17.0
Bump eslint from 9.16.0 to 9.17.0
2024-12-16 08:34:50 +00:00
Aine
2c9103c769
Merge pull request #223 from etkecc/dependabot/npm_and_yarn/types/node-22.10.2
Bump @types/node from 22.10.1 to 22.10.2
2024-12-16 08:34:30 +00:00
Aine
1c6f91d3a9
Merge pull request #224 from etkecc/dependabot/npm_and_yarn/mui/material-6.2.0
Bump @mui/material from 6.1.10 to 6.2.0
2024-12-16 08:34:16 +00:00
Aine
05826e2ae1
Merge pull request #225 from etkecc/dependabot/npm_and_yarn/emotion/react-11.14.0
Bump @emotion/react from 11.13.5 to 11.14.0
2024-12-16 08:34:03 +00:00
Aine
f6ebd71ac2
Merge pull request #227 from etkecc/dependabot/npm_and_yarn/typescript-eslint/parser-8.18.0
Bump @typescript-eslint/parser from 8.17.0 to 8.18.0
2024-12-16 08:33:50 +00:00
dependabot[bot]
49d0157c81
Bump @emotion/react from 11.13.5 to 11.14.0
Bumps [@emotion/react](https://github.com/emotion-js/emotion) from 11.13.5 to 11.14.0.
- [Release notes](https://github.com/emotion-js/emotion/releases)
- [Changelog](https://github.com/emotion-js/emotion/blob/main/CHANGELOG.md)
- [Commits](https://github.com/emotion-js/emotion/compare/@emotion/react@11.13.5...@emotion/react@11.14.0)

---
updated-dependencies:
- dependency-name: "@emotion/react"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-16 08:32:54 +00:00
dependabot[bot]
ccfc5e4478
Bump @mui/material from 6.1.10 to 6.2.0
Bumps [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) from 6.1.10 to 6.2.0.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.2.0/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-16 08:32:46 +00:00
dependabot[bot]
66953dba3d
Bump @types/node from 22.10.1 to 22.10.2
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.10.1 to 22.10.2.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-16 08:31:49 +00:00
dependabot[bot]
f4df8c070c
Bump eslint from 9.16.0 to 9.17.0
Bumps [eslint](https://github.com/eslint/eslint) from 9.16.0 to 9.17.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.16.0...v9.17.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-16 08:31:33 +00:00
dependabot[bot]
c3fa4daddb
Bump @typescript-eslint/parser from 8.17.0 to 8.18.0
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 8.17.0 to 8.18.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.18.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-16 08:31:33 +00:00
Aine
b6782c64f7
Merge pull request #235 from etkecc/dependabot/npm_and_yarn/npm_and_yarn-af93afb32e
Bump nanoid from 3.3.7 to 3.3.8 in the npm_and_yarn group
2024-12-16 08:30:20 +00:00
Aine
8a65621b35
Merge pull request #228 from etkecc/dependabot/npm_and_yarn/ra-language-french-5.4.2
Bump ra-language-french from 5.4.1 to 5.4.2
2024-12-16 08:30:05 +00:00
Aine
b8b0d46070
Merge pull request #229 from etkecc/dependabot/npm_and_yarn/tanstack/react-query-5.62.7
Bump @tanstack/react-query from 5.62.3 to 5.62.7
2024-12-16 08:29:53 +00:00
dependabot[bot]
2f73970e47
Bump nanoid from 3.3.7 to 3.3.8 in the npm_and_yarn group
Bumps the npm_and_yarn group with 1 update: [nanoid](https://github.com/ai/nanoid).


Updates `nanoid` from 3.3.7 to 3.3.8
- [Release notes](https://github.com/ai/nanoid/releases)
- [Changelog](https://github.com/ai/nanoid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ai/nanoid/compare/3.3.7...3.3.8)

---
updated-dependencies:
- dependency-name: nanoid
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-16 08:29:50 +00:00
Aine
ceacddf9c6
Merge pull request #231 from etkecc/dependabot/npm_and_yarn/emotion/styled-11.14.0
Bump @emotion/styled from 11.13.5 to 11.14.0
2024-12-16 08:29:39 +00:00
Aine
4e89ad5f56
Merge pull request #234 from etkecc/dependabot/npm_and_yarn/eslint/js-9.17.0
Bump @eslint/js from 9.16.0 to 9.17.0
2024-12-16 08:29:27 +00:00
Aine
1d4b4f97da
Merge pull request #232 from etkecc/dependabot/npm_and_yarn/typescript-eslint/eslint-plugin-8.18.0
Bump @typescript-eslint/eslint-plugin from 8.17.0 to 8.18.0
2024-12-16 08:29:16 +00:00
Aine
ac36a93203
Merge pull request #230 from etkecc/dependabot/npm_and_yarn/react-hook-form-7.54.1
Bump react-hook-form from 7.54.0 to 7.54.1
2024-12-16 08:29:03 +00:00
Aine
1dd0b242e2
Merge pull request #233 from etkecc/dependabot/npm_and_yarn/react-admin-5.4.2
Bump react-admin from 5.4.1 to 5.4.2
2024-12-16 08:28:46 +00:00
dependabot[bot]
608d9fa9d8
Bump @eslint/js from 9.16.0 to 9.17.0
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.16.0 to 9.17.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.17.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-16 08:09:20 +00:00
dependabot[bot]
f5841c6a30
Bump react-admin from 5.4.1 to 5.4.2
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.4.1 to 5.4.2.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.4.1...v5.4.2)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-16 08:09:11 +00:00
dependabot[bot]
266b13ce0b
Bump @typescript-eslint/eslint-plugin from 8.17.0 to 8.18.0
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 8.17.0 to 8.18.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.18.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-16 08:09:02 +00:00
dependabot[bot]
1be9171b93
Bump @emotion/styled from 11.13.5 to 11.14.0
Bumps [@emotion/styled](https://github.com/emotion-js/emotion) from 11.13.5 to 11.14.0.
- [Release notes](https://github.com/emotion-js/emotion/releases)
- [Changelog](https://github.com/emotion-js/emotion/blob/main/CHANGELOG.md)
- [Commits](https://github.com/emotion-js/emotion/compare/@emotion/styled@11.13.5...@emotion/styled@11.14.0)

---
updated-dependencies:
- dependency-name: "@emotion/styled"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-16 08:08:48 +00:00
dependabot[bot]
037c2acee2
Bump react-hook-form from 7.54.0 to 7.54.1
Bumps [react-hook-form](https://github.com/react-hook-form/react-hook-form) from 7.54.0 to 7.54.1.
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.54.0...v7.54.1)

---
updated-dependencies:
- dependency-name: react-hook-form
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-16 08:08:29 +00:00
dependabot[bot]
38a0c9a9fc
Bump @tanstack/react-query from 5.62.3 to 5.62.7
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.62.3 to 5.62.7.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.62.7/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-16 08:08:20 +00:00
dependabot[bot]
8703cff7bf
Bump ra-language-french from 5.4.1 to 5.4.2
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.4.1 to 5.4.2.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.4.1...v5.4.2)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-16 08:08:11 +00:00
Aine
687e3364b0
Merge pull request #195 from etkecc/add-account-suspention
Add support for Account Suspension (MSC3823)
2024-12-11 18:51:39 +02:00
Aine
149f5737dd
update readme 2024-12-11 18:51:20 +02:00
Aine
c2867e44c6
Merge branch 'main' into add-account-suspention 2024-12-11 18:46:04 +02:00
Aine
f58562cd5b
Merge pull request #214 from etkecc/add-e.164-mxids-support
* Support E.164-based Matrix IDs (MSC4009)

* update README
2024-12-11 18:28:04 +02:00
Aine
92845a8640
update README 2024-12-11 18:27:41 +02:00
Aine
4fd18007de
Support E.164-based Matrix IDs (MSC4009) 2024-12-11 18:24:08 +02:00
Aine
005be8eec5
Merge branch 'main' into add-account-suspention 2024-12-10 22:32:07 +02:00
Borislav Pantaleev
402457640c
Add "Media" tab for rooms (#196)
* WIP on Media tab to rooms

* handle error for downloadFile if it's missing

* Add warning message for rooms Media tab

* Fix error message for download media of rooms

* update readme
2024-12-09 21:56:45 +02:00
Aine
c3dd0facd2
Merge branch 'main' into add-account-suspention 2024-12-09 14:42:38 +02:00
dependabot[bot]
2fa5600d24
Bump vite from 5.4.11 to 6.0.3 (#200)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.11 to 6.0.3.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/main/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v6.0.3/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-09 11:50:28 +02:00
Aine
c35416ec13
add safeguard for custom menu 2024-12-09 11:42:05 +02:00
dependabot[bot]
9e6e31a728
Bump vite-plugin-version-mark from 0.1.3 to 0.1.4 (#197)
Bumps [vite-plugin-version-mark](https://github.com/ZhongxuYang/vite-plugin-version-mark) from 0.1.3 to 0.1.4.
- [Release notes](https://github.com/ZhongxuYang/vite-plugin-version-mark/releases)
- [Changelog](https://github.com/ZhongxuYang/vite-plugin-version-mark/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ZhongxuYang/vite-plugin-version-mark/compare/v0.1.3...v0.1.4)

---
updated-dependencies:
- dependency-name: vite-plugin-version-mark
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-09 11:14:50 +02:00
dependabot[bot]
d7677af085
Bump ra-language-farsi from 5.0.0 to 5.1.0 (#199)
Bumps [ra-language-farsi](https://github.com/hamidfzm/ra-language-farsi) from 5.0.0 to 5.1.0.
- [Release notes](https://github.com/hamidfzm/ra-language-farsi/releases)
- [Commits](https://github.com/hamidfzm/ra-language-farsi/compare/v5.0.0...v5.1.0)

---
updated-dependencies:
- dependency-name: ra-language-farsi
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-09 11:13:45 +02:00
dependabot[bot]
dc0ba15828
Bump prettier from 3.4.1 to 3.4.2 (#202)
Bumps [prettier](https://github.com/prettier/prettier) from 3.4.1 to 3.4.2.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.4.1...3.4.2)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-09 11:09:53 +02:00
dependabot[bot]
6527565a18
Bump @testing-library/react from 16.0.1 to 16.1.0 (#203)
Bumps [@testing-library/react](https://github.com/testing-library/react-testing-library) from 16.0.1 to 16.1.0.
- [Release notes](https://github.com/testing-library/react-testing-library/releases)
- [Changelog](https://github.com/testing-library/react-testing-library/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/react-testing-library/compare/v16.0.1...v16.1.0)

---
updated-dependencies:
- dependency-name: "@testing-library/react"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-09 11:09:39 +02:00
dependabot[bot]
c0a4004fd3
Bump ra-language-french from 5.4.0 to 5.4.1 (#205)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.4.0 to 5.4.1.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.4.0...v5.4.1)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-09 11:09:26 +02:00
dependabot[bot]
97384d1ebb
Bump @mui/material from 6.1.9 to 6.1.10 (#207)
Bumps [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) from 6.1.9 to 6.1.10.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.1.10/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-09 11:09:14 +02:00
dependabot[bot]
41768eb157
Bump @tanstack/react-query from 5.62.0 to 5.62.3 (#208)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.62.0 to 5.62.3.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.62.3/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-09 11:05:16 +02:00
dependabot[bot]
0c89493b58
Bump @mui/icons-material from 6.1.8 to 6.1.9 (#209)
Bumps [@mui/icons-material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-icons-material) from 6.1.8 to 6.1.9.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.1.9/packages/mui-icons-material)

---
updated-dependencies:
- dependency-name: "@mui/icons-material"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-09 11:05:03 +02:00
dependabot[bot]
d5d1be794d
Bump react-admin from 5.4.0 to 5.4.1 (#210)
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.4.0 to 5.4.1.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.4.0...v5.4.1)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-09 11:04:42 +02:00
dependabot[bot]
b2dc623448
Bump typescript-eslint from 8.16.0 to 8.17.0 (#211)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.16.0 to 8.17.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.17.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-09 10:59:57 +02:00
dependabot[bot]
fa90a82745
Bump react-hook-form from 7.53.2 to 7.54.0 (#212)
Bumps [react-hook-form](https://github.com/react-hook-form/react-hook-form) from 7.53.2 to 7.54.0.
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.53.2...v7.54.0)

---
updated-dependencies:
- dependency-name: react-hook-form
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-09 10:59:46 +02:00
dependabot[bot]
b55532e93e
Bump ra-core from 5.4.0 to 5.4.1 (#213)
Bumps [ra-core](https://github.com/marmelab/react-admin) from 5.4.0 to 5.4.1.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.4.0...v5.4.1)

---
updated-dependencies:
- dependency-name: ra-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-09 10:59:28 +02:00
Aine
880270bfe6
Add support for MSC3823 - Account Suspension 2024-12-07 14:47:26 +02:00
Borislav Pantaleev
7c21692a1e
Add server status page and a badge in AppBar (#182)
* WIP: Add server status and running process indicators

* Finish ServerStatusPage and ServerRunningProcess

* fix typos, add running process info to the server status page

* Remove ServerRunningProcess and integrate it into ServerStatusBadge

* remove divider in menu

* display time as started X minutes ago

* add documentation; clearly state what new components are; update readme

* change wording a bit, cross-link with docs/README.md

* use returned HTML

* Finish ServerStatus page and badges

* Fix types

* cleanup

* remove some code

* adjust config load
2024-12-04 00:14:29 +02:00
dependabot[bot]
3b69e78bb8
Bump eslint from 9.15.0 to 9.16.0 (#193)
Bumps [eslint](https://github.com/eslint/eslint) from 9.15.0 to 9.16.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.15.0...v9.16.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-02 10:30:24 +02:00
dependabot[bot]
a6caa0714e
Bump prettier from 3.3.3 to 3.4.1 (#191)
Bumps [prettier](https://github.com/prettier/prettier) from 3.3.3 to 3.4.1.
- [Release notes](https://github.com/prettier/prettier/releases)
- [Changelog](https://github.com/prettier/prettier/blob/main/CHANGELOG.md)
- [Commits](https://github.com/prettier/prettier/compare/3.3.3...3.4.1)

---
updated-dependencies:
- dependency-name: prettier
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-02 10:30:10 +02:00
dependabot[bot]
83473dd3fa
Bump @mui/utils from 5.16.6 to 5.16.8 (#185)
Bumps [@mui/utils](https://github.com/mui/material-ui/tree/HEAD/packages/mui-utils) from 5.16.6 to 5.16.8.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/v5.16.8/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v5.16.8/packages/mui-utils)

---
updated-dependencies:
- dependency-name: "@mui/utils"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-02 10:29:56 +02:00
dependabot[bot]
aad90760a5
Bump @types/node from 22.9.3 to 22.10.1 (#189)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.9.3 to 22.10.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-02 10:21:02 +02:00
dependabot[bot]
cb853bf342
Bump @vitejs/plugin-react from 4.3.3 to 4.3.4 (#188)
Bumps [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) from 4.3.3 to 4.3.4.
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/v4.3.4/packages/plugin-react)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-02 10:20:47 +02:00
dependabot[bot]
8d45ae2886
Bump @tanstack/react-query from 5.61.3 to 5.62.0 (#187)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.61.3 to 5.62.0.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.62.0/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-02 10:20:31 +02:00
dependabot[bot]
2e151cf198
Bump vite-plugin-version-mark from 0.1.2 to 0.1.3 (#186)
Bumps [vite-plugin-version-mark](https://github.com/ZhongxuYang/vite-plugin-version-mark) from 0.1.2 to 0.1.3.
- [Release notes](https://github.com/ZhongxuYang/vite-plugin-version-mark/releases)
- [Changelog](https://github.com/ZhongxuYang/vite-plugin-version-mark/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ZhongxuYang/vite-plugin-version-mark/compare/v0.1.2...v0.1.3)

---
updated-dependencies:
- dependency-name: vite-plugin-version-mark
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-02 10:20:16 +02:00
dependabot[bot]
52c17bc5ca
Bump @mui/material from 6.1.8 to 6.1.9 (#184)
Bumps [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) from 6.1.8 to 6.1.9.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.1.9/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-02 10:19:57 +02:00
dependabot[bot]
d79d825ab4
Bump typescript-eslint from 8.15.0 to 8.16.0 (#183)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.15.0 to 8.16.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.16.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-12-02 10:19:42 +02:00
Aine
28b80d7fa2
Show 50 elements by default in the list of each resource 2024-11-30 21:49:05 +02:00
Aine
9735ffbc19
fix readme link 2024-11-30 17:05:29 +02:00
Aine
f4d0e19d21
Allow prefilling of any fields of the login form using GET params (#181)
* Allow prefilling of any fields of the login form using GET params

* update readme
2024-11-29 19:17:52 +02:00
Aine
14d1c904c0
add docs/README.md 2024-11-29 16:58:30 +02:00
Aine
392fec3186
refactoring (#178)
* unify components import

* refactor config and app context

* refactor icons

* refactor date, error, mxid and storage

* refactor synapse utils
2024-11-25 12:51:05 +02:00
dependabot[bot]
ea0c7a73fd
Bump typescript from 5.6.3 to 5.7.2 (#175)
Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.6.3 to 5.7.2.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.6.3...v5.7.2)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-25 11:02:59 +02:00
Aine
21c2fdb5a6
increase the dependabot PRs limit 2024-11-25 11:02:13 +02:00
dependabot[bot]
0a55fc6182
Bump @types/node from 22.8.7 to 22.9.3 (#176)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.8.7 to 22.9.3.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-25 11:01:15 +02:00
dependabot[bot]
64c4bd760b
Bump typescript-eslint from 8.13.0 to 8.15.0 (#174)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.13.0 to 8.15.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.15.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-25 11:00:56 +02:00
dependabot[bot]
e0c8fef365
Bump @mui/icons-material from 6.1.7 to 6.1.8 (#172)
Bumps [@mui/icons-material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-icons-material) from 6.1.7 to 6.1.8.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.1.8/packages/mui-icons-material)

---
updated-dependencies:
- dependency-name: "@mui/icons-material"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-25 11:00:42 +02:00
dependabot[bot]
29b757ac75
Bump ra-language-french from 5.3.4 to 5.4.0 (#173)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.3.4 to 5.4.0.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.3.4...v5.4.0)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-25 11:00:31 +02:00
dependabot[bot]
6eb0aaea88
Bump @tanstack/react-query from 5.60.5 to 5.61.3 (#171)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.60.5 to 5.61.3.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.61.3/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-25 10:39:36 +02:00
dependabot[bot]
b42a5c3b69
Bump @emotion/react from 11.13.3 to 11.13.5 (#169)
Bumps [@emotion/react](https://github.com/emotion-js/emotion) from 11.13.3 to 11.13.5.
- [Release notes](https://github.com/emotion-js/emotion/releases)
- [Changelog](https://github.com/emotion-js/emotion/blob/main/CHANGELOG.md)
- [Commits](https://github.com/emotion-js/emotion/compare/@emotion/react@11.13.3...@emotion/react@11.13.5)

---
updated-dependencies:
- dependency-name: "@emotion/react"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-25 10:39:23 +02:00
dependabot[bot]
66447ac025
Bump @mui/material from 6.1.7 to 6.1.8 (#167)
Bumps [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) from 6.1.7 to 6.1.8.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.1.8/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-25 10:36:05 +02:00
dependabot[bot]
747818af6a
Bump @emotion/styled from 11.13.0 to 11.13.5 (#166)
Bumps [@emotion/styled](https://github.com/emotion-js/emotion) from 11.13.0 to 11.13.5.
- [Release notes](https://github.com/emotion-js/emotion/releases)
- [Changelog](https://github.com/emotion-js/emotion/blob/main/CHANGELOG.md)
- [Commits](https://github.com/emotion-js/emotion/compare/@emotion/styled@11.13.0...@emotion/styled@11.13.5)

---
updated-dependencies:
- dependency-name: "@emotion/styled"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-25 10:35:52 +02:00
dependabot[bot]
a86fa93608
Bump react-hook-form from 7.53.1 to 7.53.2 (#165)
Bumps [react-hook-form](https://github.com/react-hook-form/react-hook-form) from 7.53.1 to 7.53.2.
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.53.1...v7.53.2)

---
updated-dependencies:
- dependency-name: react-hook-form
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-25 10:35:41 +02:00
dependabot[bot]
f948318919
Bump @typescript-eslint/parser from 8.13.0 to 8.15.0 (#164)
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 8.13.0 to 8.15.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.15.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-25 10:34:29 +02:00
dependabot[bot]
5fea8de023
Bump react-admin from 5.3.3 to 5.4.0 (#163)
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.3.3 to 5.4.0.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.3.3...v5.4.0)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-25 10:33:30 +02:00
Aine
20417a67b9
User badges (#160)
* Users badges

* update readme
2024-11-22 00:37:16 +02:00
Aine
cfd8238edc
migrate config away from localStorage; ensure config is properly loaded on access token auth 2024-11-21 23:31:07 +02:00
Aine
eae00a6ccd
use first letter of display name / name / id as default avatar 2024-11-21 22:34:44 +02:00
Aine
3731410486
fix password input helper text (cover all 3 cases: system-managed user, update password, create a new password); add translations for 'generate password' button 2024-11-21 21:26:50 +02:00
Aine
099e349a90
Add missing "generate password" button to the user create form; fix password's helperText 2024-11-21 21:16:39 +02:00
Aine
de125d0d66
add missing labels in the rooms list 2024-11-21 15:56:17 +02:00
Aine
eb8e8f80a9
add explicit labels to the rooms list 2024-11-21 15:24:11 +02:00
ll-SKY-ll
1229266546
Update de.ts (#159)
* Update de.ts

not sure if i like the wording in line 193, but couldnt come up with something better, so I guess its fine

* Update de.ts
2024-11-21 15:01:58 +02:00
Aine
6620942928
add explicit labels to datagrids in destinations, registration tokens, reports, and users (list) 2024-11-21 14:59:03 +02:00
Aine
998d3817c6
Add rooms' avatars (#158)
* Add room avatars

* update readme
2024-11-21 13:46:11 +02:00
Aine
abca842eb9
fix DE message 2024-11-21 10:51:54 +02:00
Borislav Pantaleev
cb1314ab1d
Add "Assign Admin" button to the rooms (#156)
* wip on make admin button

* Finish assign admin button

* fixes from pr

* update readme; remove unnecessary console.log; add assign admin to room directory and room view; rename user_id label; set own MXID by default; fix room name display when there is no name
2024-11-21 07:11:48 +02:00
Aine
dae6872fe8
add reverse proxy docs 2024-11-20 16:31:55 +02:00
Aine
61b91adf25
fix readme 2024-11-20 13:03:49 +02:00
Aine
5f7f587477
add config docs 2024-11-20 13:02:45 +02:00
Aine
75b9aeea01
add docs/ 2024-11-20 12:36:12 +02:00
Aine
fb71b5ed08
update readme 2024-11-20 11:56:35 +02:00
Aine
2e8e5e73bc
unify project name across translations 2024-11-19 15:16:43 +02:00
Borislav Pantaleev
befcd15298
Add preferred theme colors to footer (#155)
* Add preferred theme colors to footer

* remove inline-block

* Add Footer to LoginPage

* update README, add new screenshot, update Footer
2024-11-19 11:14:06 +02:00
Aine
86d0fd04e6
make login form use dark/light theme 2024-11-18 12:48:20 +02:00
dependabot[bot]
c28ed94ca0
Bump @mui/icons-material from 6.1.5 to 6.1.7 (#153)
Bumps [@mui/icons-material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-icons-material) from 6.1.5 to 6.1.7.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.1.7/packages/mui-icons-material)

---
updated-dependencies:
- dependency-name: "@mui/icons-material"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-18 10:25:02 +02:00
dependabot[bot]
d139ab4a7d
Bump ra-language-english from 5.3.3 to 5.3.4 (#143)
Bumps [ra-language-english](https://github.com/marmelab/react-admin) from 5.3.3 to 5.3.4.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.3.3...v5.3.4)

---
updated-dependencies:
- dependency-name: ra-language-english
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-18 10:23:31 +02:00
dependabot[bot]
6575a05a8a
Bump @mui/material from 6.1.6 to 6.1.7 (#145)
Bumps [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) from 6.1.6 to 6.1.7.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.1.7/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-18 10:21:33 +02:00
dependabot[bot]
3f2c3f2c0c
Bump vite from 5.4.10 to 5.4.11 (#146)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.10 to 5.4.11.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.11/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.11/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-18 10:21:18 +02:00
dependabot[bot]
2c5ee7da10
Bump ra-i18n-polyglot from 5.3.3 to 5.3.4 (#147)
Bumps [ra-i18n-polyglot](https://github.com/marmelab/react-admin) from 5.3.3 to 5.3.4.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.3.3...v5.3.4)

---
updated-dependencies:
- dependency-name: ra-i18n-polyglot
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-18 10:21:01 +02:00
dependabot[bot]
03bf4a5c5d
Bump eslint from 9.14.0 to 9.15.0 (#148)
Bumps [eslint](https://github.com/eslint/eslint) from 9.14.0 to 9.15.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.14.0...v9.15.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-18 10:20:47 +02:00
dependabot[bot]
3fce37b735
Bump @tanstack/react-query from 5.59.20 to 5.60.5 (#149)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.59.20 to 5.60.5.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.60.5/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-18 10:20:33 +02:00
dependabot[bot]
6c6ec227fa
Bump ra-language-french from 5.3.3 to 5.3.4 (#150)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.3.3 to 5.3.4.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.3.3...v5.3.4)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-18 10:20:20 +02:00
dependabot[bot]
128fea726e
Bump @typescript-eslint/eslint-plugin from 8.13.0 to 8.14.0 (#151)
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 8.13.0 to 8.14.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.14.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-18 10:17:41 +02:00
dependabot[bot]
97c44f85ef
Bump ra-core from 5.3.3 to 5.3.4 (#152)
Bumps [ra-core](https://github.com/marmelab/react-admin) from 5.3.3 to 5.3.4.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.3.3...v5.3.4)

---
updated-dependencies:
- dependency-name: ra-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-18 10:17:29 +02:00
Aine
ca2decda3a
add nginx config example 2024-11-18 10:15:40 +02:00
dependabot[bot]
e394a7e186
Bump cross-spawn from 7.0.3 to 7.0.5 in the npm_and_yarn group (#142)
Bumps the npm_and_yarn group with 1 update: [cross-spawn](https://github.com/moxystudio/node-cross-spawn).


Updates `cross-spawn` from 7.0.3 to 7.0.5
- [Changelog](https://github.com/moxystudio/node-cross-spawn/blob/master/CHANGELOG.md)
- [Commits](https://github.com/moxystudio/node-cross-spawn/compare/v7.0.3...v7.0.5)

---
updated-dependencies:
- dependency-name: cross-spawn
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-16 06:23:40 +00:00
dependabot[bot]
c182f600f8
Bump @eslint/plugin-kit from 0.2.1 to 0.2.3 in the npm_and_yarn group (#141)
Bumps the npm_and_yarn group with 1 update: [@eslint/plugin-kit](https://github.com/eslint/rewrite).


Updates `@eslint/plugin-kit` from 0.2.1 to 0.2.3
- [Release notes](https://github.com/eslint/rewrite/releases)
- [Changelog](https://github.com/eslint/rewrite/blob/main/release-please-config.json)
- [Commits](https://github.com/eslint/rewrite/compare/plugin-kit-v0.2.1...plugin-kit-v0.2.3)

---
updated-dependencies:
- dependency-name: "@eslint/plugin-kit"
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-15 22:45:21 +00:00
Borislav Pantaleev
915e3564f8
Allow providing login form details via GET params (#140)
* Allow providing login form details via GET params

* add http:// to serverURL if it's only domian name

* update readme
2024-11-14 09:26:12 +02:00
Aine
1570ca5485
automatically check for app update 2024-11-13 23:44:54 +02:00
Borislav Pantaleev
b94b782547
Prevent accidental user overwrites (#139)
* Prevent accidental user overwrites

* cleanup

* update translation

* update readme
2024-11-12 10:15:33 +02:00
dependabot[bot]
90328a5b19
Bump eslint from 9.13.0 to 9.14.0 (#129)
Bumps [eslint](https://github.com/eslint/eslint) from 9.13.0 to 9.14.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v9.13.0...v9.14.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-11 11:33:31 +02:00
dependabot[bot]
b42eb07a2f
Bump @tanstack/react-query from 5.59.19 to 5.59.20 (#131)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.59.19 to 5.59.20.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.59.20/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-11 11:33:19 +02:00
dependabot[bot]
131bfaaece
Bump typescript-eslint from 8.12.2 to 8.13.0 (#132)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.12.2 to 8.13.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.13.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-11 11:33:10 +02:00
dependabot[bot]
b759d5d5fb
Bump @typescript-eslint/parser from 8.12.2 to 8.13.0 (#135)
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 8.12.2 to 8.13.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.13.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-11 11:10:34 +02:00
dependabot[bot]
003e9da792
Bump ra-language-french from 5.3.1 to 5.3.3 (#136)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.3.1 to 5.3.3.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.3.1...v5.3.3)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-11 11:10:18 +02:00
dependabot[bot]
908271060b
Bump react-router-dom from 6.27.0 to 6.28.0 (#137)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.27.0 to 6.28.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/main/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.28.0/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-11 11:10:04 +02:00
dependabot[bot]
08cd427084
Bump react-admin from 5.3.1 to 5.3.3 (#138)
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.3.1 to 5.3.3.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.3.1...v5.3.3)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-11 11:09:48 +02:00
Aine
73a1d952b1
update readme 2024-11-08 19:04:40 +02:00
Aine
1d5511421d
better rate limits handling 2024-11-07 12:15:18 +02:00
Aine
b925c63171
clear storage on logout 2024-11-07 10:46:25 +02:00
Aine
6faebaf9df
properly handle restrictBaseUrl config option, fixes #128 2024-11-07 10:34:06 +02:00
Aine
c698f57395
Add support for config from /.well-known/matrix/client (#126)
* Add support for config from /.well-known/matrix/client

* final fixes, refactoring, updated readme
2024-11-07 00:24:33 +02:00
Borislav Pantaleev
9adc13e722
Add User Rate Limits tab (#125)
* Add User Rate Limits tab

* update readme
2024-11-06 23:55:14 +02:00
Borislav Pantaleev
a04b24a5d5
add random password generation on user create/edit form (#123)
* Add button to generate password in UserEdit

* increase default random password length to 64, add more possible symbols to the generator

* update readme
2024-11-06 11:48:44 +02:00
Borislav Pantaleev
cd1ca7c039
Add option to control user's experimental features (#111)
* Add option to control user's experimental features

* Don't use ReferenceManyField, load experimental features manually

* cleanup

* Move experimental features to their own components, improve UI

* remove background from Stack

* update readme
2024-11-06 11:25:47 +02:00
dependabot[bot]
86b4987b7f
Bump ra-i18n-polyglot from 5.3.1 to 5.3.2 (#113)
Bumps [ra-i18n-polyglot](https://github.com/marmelab/react-admin) from 5.3.1 to 5.3.2.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.3.1...v5.3.2)

---
updated-dependencies:
- dependency-name: ra-i18n-polyglot
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-04 11:48:36 +02:00
dependabot[bot]
a7cf647669
Bump @types/lodash from 4.17.12 to 4.17.13 (#114)
Bumps [@types/lodash](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash) from 4.17.12 to 4.17.13.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash)

---
updated-dependencies:
- dependency-name: "@types/lodash"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-04 11:48:25 +02:00
dependabot[bot]
80d40d2fb5
Bump @tanstack/react-query from 5.59.16 to 5.59.19 (#116)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.59.16 to 5.59.19.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.59.19/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-04 11:43:55 +02:00
dependabot[bot]
b19e961a35
Bump typescript-eslint from 8.11.0 to 8.12.2 (#117)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.11.0 to 8.12.2.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.12.2/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-04 11:43:42 +02:00
dependabot[bot]
08f5f8ebd2
Bump @types/node from 22.8.1 to 22.8.7 (#118)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.8.1 to 22.8.7.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-04 11:43:30 +02:00
dependabot[bot]
1edf196049
Bump ra-language-english from 5.3.1 to 5.3.2 (#119)
Bumps [ra-language-english](https://github.com/marmelab/react-admin) from 5.3.1 to 5.3.2.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.3.1...v5.3.2)

---
updated-dependencies:
- dependency-name: ra-language-english
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-04 11:43:11 +02:00
dependabot[bot]
1f66b4d14a
Bump ra-core from 5.3.1 to 5.3.2 (#120)
Bumps [ra-core](https://github.com/marmelab/react-admin) from 5.3.1 to 5.3.2.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.3.1...v5.3.2)

---
updated-dependencies:
- dependency-name: ra-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-04 11:42:57 +02:00
dependabot[bot]
cec5b0af9a
Bump @testing-library/jest-dom from 6.6.2 to 6.6.3 (#121)
Bumps [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) from 6.6.2 to 6.6.3.
- [Release notes](https://github.com/testing-library/jest-dom/releases)
- [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/jest-dom/compare/v6.6.2...v6.6.3)

---
updated-dependencies:
- dependency-name: "@testing-library/jest-dom"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-04 11:42:44 +02:00
dependabot[bot]
2b0e1e7c0e
Bump @mui/material from 6.1.5 to 6.1.6 (#122)
Bumps [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) from 6.1.5 to 6.1.6.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.1.6/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-11-04 11:42:31 +02:00
Aine
a613a88232
allow setting version using SYNAPSE_ADMIN_VERSION env var on build (if git is not available) 2024-10-31 17:18:28 +02:00
Aine
7afce71bef
handle envs without git in the build hook 2024-10-31 17:11:27 +02:00
Aine
fe4ba22a03
update README 2024-10-30 18:49:32 +02:00
Aine
eb35d9e122
remove CI hack to include version into manifest.json (now generated on each build automatically) 2024-10-30 18:00:05 +02:00
Aine
fa79fecc9d
Generate extended manifest.json on build 2024-10-30 17:58:33 +02:00
dependabot[bot]
61366b3792
Bump ra-language-english from 5.3.0 to 5.3.1 (#102)
Bumps [ra-language-english](https://github.com/marmelab/react-admin) from 5.3.0 to 5.3.1.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.3.0...v5.3.1)

---
updated-dependencies:
- dependency-name: ra-language-english
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-28 10:55:00 +02:00
dependabot[bot]
b55033d983
Bump react-admin from 5.3.0 to 5.3.1 (#103)
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.3.0 to 5.3.1.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.3.0...v5.3.1)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-28 10:54:46 +02:00
dependabot[bot]
b1f42988c8
Bump ra-language-french from 5.3.0 to 5.3.1 (#104)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.3.0 to 5.3.1.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.3.0...v5.3.1)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-28 10:54:27 +02:00
dependabot[bot]
ef05b366c3
Bump eslint-plugin-jsx-a11y from 6.10.1 to 6.10.2 (#105)
Bumps [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) from 6.10.1 to 6.10.2.
- [Release notes](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/releases)
- [Changelog](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/compare/v6.10.1...v6.10.2)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsx-a11y
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-28 10:53:30 +02:00
dependabot[bot]
b3d52e7d23
Bump @types/node from 22.7.9 to 22.8.1 (#106)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.7.9 to 22.8.1.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-28 10:53:18 +02:00
dependabot[bot]
d1c4250b46
Bump @tanstack/react-query from 5.59.15 to 5.59.16 (#107)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.59.15 to 5.59.16.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.59.16/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-28 10:53:04 +02:00
dependabot[bot]
8d44077b24
Bump ra-core from 5.3.0 to 5.3.1 (#109)
Bumps [ra-core](https://github.com/marmelab/react-admin) from 5.3.0 to 5.3.1.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.3.0...v5.3.1)

---
updated-dependencies:
- dependency-name: ra-core
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-28 10:52:37 +02:00
Aine
44e8b82412
Sanitize CSV on import (#101)
* Sanitize CSV on import

* update readme
2024-10-25 11:52:26 +03:00
Aine
791ae2c869
update naming 2024-10-24 21:49:00 +03:00
Aine
ee3753466a
update manifest 2024-10-24 17:27:10 +03:00
Aine
b7dc703157
add community room to the footer 2024-10-24 14:17:02 +03:00
Aine
2eca0dcc33
better visual 2024-10-24 14:11:59 +03:00
Aine
d2219c1667
try adding community room to the readme 2024-10-24 14:11:23 +03:00
Aine
132ea6f97f
add images 2024-10-24 13:44:12 +03:00
Aine
28ef08de03
Fix room state events display (#100)
* Fix room state events table display

* update readme
2024-10-23 13:48:21 +03:00
Aine
865e53388e
fix yarn lint 2024-10-23 12:31:52 +03:00
dependabot[bot]
3a105bb8c7
Bump eslint from 8.57.1 to 9.13.0 (#99)
Bumps [eslint](https://github.com/eslint/eslint) from 8.57.1 to 9.13.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/compare/v8.57.1...v9.13.0)

---
updated-dependencies:
- dependency-name: eslint
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-23 12:14:33 +03:00
dependabot[bot]
edcda7a202
Bump @mui/icons-material from 6.1.1 to 6.1.5 (#98)
Bumps [@mui/icons-material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-icons-material) from 6.1.1 to 6.1.5.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.1.5/packages/mui-icons-material)

---
updated-dependencies:
- dependency-name: "@mui/icons-material"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-23 12:13:59 +03:00
dependabot[bot]
edd69273e2
Bump typescript-eslint from 8.10.0 to 8.11.0 (#88)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 8.10.0 to 8.11.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.11.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-23 12:10:43 +03:00
dependabot[bot]
444bfacbd9
Bump eslint-plugin-unused-imports from 3.2.0 to 4.1.4 (#93)
Bumps [eslint-plugin-unused-imports](https://github.com/sweepline/eslint-plugin-unused-imports) from 3.2.0 to 4.1.4.
- [Commits](https://github.com/sweepline/eslint-plugin-unused-imports/commits/v4.1.4)

---
updated-dependencies:
- dependency-name: eslint-plugin-unused-imports
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-23 12:07:18 +03:00
dependabot[bot]
970e0a550f
Bump @types/node from 22.7.7 to 22.7.9 (#91)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 22.7.7 to 22.7.9.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-23 12:06:41 +03:00
dependabot[bot]
b3ef68d66e
Bump @types/jest from 29.5.13 to 29.5.14 (#95)
Bumps [@types/jest](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/jest) from 29.5.13 to 29.5.14.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/jest)

---
updated-dependencies:
- dependency-name: "@types/jest"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-23 12:06:26 +03:00
dependabot[bot]
31382a42ee
Bump @typescript-eslint/eslint-plugin from 8.10.0 to 8.11.0 (#92)
Bumps [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin) from 8.10.0 to 8.11.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.11.0/packages/eslint-plugin)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/eslint-plugin"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-23 12:06:11 +03:00
dependabot[bot]
1a7748d1ef
Bump @vitejs/plugin-react from 4.3.2 to 4.3.3 (#87)
Bumps [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) from 4.3.2 to 4.3.3.
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/v4.3.3/packages/plugin-react)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-23 12:05:51 +03:00
dependabot[bot]
039b28cc5c
Bump vite from 5.4.6 to 5.4.10 (#89)
Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 5.4.6 to 5.4.10.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v5.4.10/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v5.4.10/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-23 12:03:42 +03:00
dependabot[bot]
57eae3edb3
Bump @mui/material from 6.1.1 to 6.1.5 (#94)
Bumps [@mui/material](https://github.com/mui/material-ui/tree/HEAD/packages/mui-material) from 6.1.1 to 6.1.5.
- [Release notes](https://github.com/mui/material-ui/releases)
- [Changelog](https://github.com/mui/material-ui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mui/material-ui/commits/v6.1.5/packages/mui-material)

---
updated-dependencies:
- dependency-name: "@mui/material"
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-23 12:03:20 +03:00
dependabot[bot]
dadc9416c0
Bump eslint-plugin-jsx-a11y from 6.10.0 to 6.10.1 (#97)
Bumps [eslint-plugin-jsx-a11y](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y) from 6.10.0 to 6.10.1.
- [Release notes](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/releases)
- [Changelog](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/CHANGELOG.md)
- [Commits](https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/compare/v6.10.0...v6.10.1)

---
updated-dependencies:
- dependency-name: eslint-plugin-jsx-a11y
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-23 12:03:03 +03:00
dependabot[bot]
eab2342114
Bump @types/lodash from 4.17.7 to 4.17.12 (#96)
Bumps [@types/lodash](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/lodash) from 4.17.7 to 4.17.12.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/lodash)

---
updated-dependencies:
- dependency-name: "@types/lodash"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-23 12:02:40 +03:00
dependabot[bot]
9cf2f83936
Bump ra-language-french from 5.2.0 to 5.3.0 (#90)
Bumps [ra-language-french](https://github.com/marmelab/react-admin) from 5.2.0 to 5.3.0.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.2.0...v5.3.0)

---
updated-dependencies:
- dependency-name: ra-language-french
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-23 12:02:09 +03:00
dependabot[bot]
d823856873
Bump @typescript-eslint/parser from 8.10.0 to 8.11.0 (#86)
Bumps [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser) from 8.10.0 to 8.11.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.11.0/packages/parser)

---
updated-dependencies:
- dependency-name: "@typescript-eslint/parser"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-23 12:01:17 +03:00
dependabot[bot]
9b96c7cec8
Bump @eslint/js from 9.10.0 to 9.13.0 (#85)
Bumps [@eslint/js](https://github.com/eslint/eslint/tree/HEAD/packages/js) from 9.10.0 to 9.13.0.
- [Release notes](https://github.com/eslint/eslint/releases)
- [Changelog](https://github.com/eslint/eslint/blob/main/CHANGELOG.md)
- [Commits](https://github.com/eslint/eslint/commits/v9.13.0/packages/js)

---
updated-dependencies:
- dependency-name: "@eslint/js"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-23 12:01:01 +03:00
dependabot[bot]
f211aba873
Bump @types/react from 18.3.8 to 18.3.12 (#84)
Bumps [@types/react](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react) from 18.3.8 to 18.3.12.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/react)

---
updated-dependencies:
- dependency-name: "@types/react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-23 12:00:50 +03:00
dependabot[bot]
c0fc2d8937
Bump @tanstack/react-query from 5.56.2 to 5.59.15 (#83)
Bumps [@tanstack/react-query](https://github.com/TanStack/query/tree/HEAD/packages/react-query) from 5.56.2 to 5.59.15.
- [Release notes](https://github.com/TanStack/query/releases)
- [Commits](https://github.com/TanStack/query/commits/v5.59.15/packages/react-query)

---
updated-dependencies:
- dependency-name: "@tanstack/react-query"
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-23 12:00:37 +03:00
Aine
a88b397748
increase dependabot PR limits 2024-10-23 11:58:50 +03:00
Aine
abc922c956
Enable visual customization (#81)
* Enable visual customization

* update readme
2024-10-23 00:03:06 +03:00
Aine
4f2cd38344
Add user profile to the top menu (#80)
* Add user profile to the top menu

* update readme
2024-10-22 12:18:55 +03:00
Aine
ca71038874
Custom Menu Items (#79)
* Custom Menu Items

* update readme

* fix indentation
2024-10-21 23:33:51 +03:00
Borislav Pantaleev
be867b6b0d
Fix types and missing translations (#78) 2024-10-21 19:37:29 +03:00
Aine
f2f540b429
fix footer content overlapping and scrollbar 2024-10-21 13:27:32 +03:00
Aine
7feec4ba07
update eslint typescript 2024-10-21 12:01:12 +03:00
Aine
1d5fef1e53
add missing package 2024-10-21 11:43:26 +03:00
dependabot[bot]
9c40efde17
Bump typescript-eslint from 7.18.0 to 8.10.0 (#76)
Bumps [typescript-eslint](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-eslint) from 7.18.0 to 8.10.0.
- [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases)
- [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/typescript-eslint/CHANGELOG.md)
- [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.10.0/packages/typescript-eslint)

---
updated-dependencies:
- dependency-name: typescript-eslint
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-21 11:34:26 +03:00
dependabot[bot]
53dff66978
Bump react-admin from 5.2.0 to 5.3.0 (#77)
Bumps [react-admin](https://github.com/marmelab/react-admin) from 5.2.0 to 5.3.0.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.2.0...v5.3.0)

---
updated-dependencies:
- dependency-name: react-admin
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-21 11:31:09 +03:00
dependabot[bot]
3a595247e8
Bump vite-plugin-version-mark from 0.1.1 to 0.1.2 (#75)
Bumps [vite-plugin-version-mark](https://github.com/ZhongxuYang/vite-plugin-version-mark) from 0.1.1 to 0.1.2.
- [Release notes](https://github.com/ZhongxuYang/vite-plugin-version-mark/releases)
- [Changelog](https://github.com/ZhongxuYang/vite-plugin-version-mark/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ZhongxuYang/vite-plugin-version-mark/compare/v0.1.1...v0.1.2)

---
updated-dependencies:
- dependency-name: vite-plugin-version-mark
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-21 11:29:57 +03:00
dependabot[bot]
33f5f60e31
Bump eslint-plugin-import from 2.30.0 to 2.31.0 (#74)
Bumps [eslint-plugin-import](https://github.com/import-js/eslint-plugin-import) from 2.30.0 to 2.31.0.
- [Release notes](https://github.com/import-js/eslint-plugin-import/releases)
- [Changelog](https://github.com/import-js/eslint-plugin-import/blob/main/CHANGELOG.md)
- [Commits](https://github.com/import-js/eslint-plugin-import/compare/v2.30.0...v2.31.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-import
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-21 11:29:35 +03:00
dependabot[bot]
9dd2ea57c9
Bump @types/papaparse from 5.3.14 to 5.3.15 (#73)
Bumps [@types/papaparse](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/papaparse) from 5.3.14 to 5.3.15.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/papaparse)

---
updated-dependencies:
- dependency-name: "@types/papaparse"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-21 11:29:16 +03:00
dependabot[bot]
fae7a696de
Bump ra-i18n-polyglot from 5.2.0 to 5.3.0 (#68)
Bumps [ra-i18n-polyglot](https://github.com/marmelab/react-admin) from 5.2.0 to 5.3.0.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.2.0...v5.3.0)

---
updated-dependencies:
- dependency-name: ra-i18n-polyglot
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-19 16:23:56 +03:00
dependabot[bot]
49e8b2d0f5
Bump vite-plugin-version-mark from 0.1.0 to 0.1.1 (#72)
Bumps [vite-plugin-version-mark](https://github.com/ZhongxuYang/vite-plugin-version-mark) from 0.1.0 to 0.1.1.
- [Release notes](https://github.com/ZhongxuYang/vite-plugin-version-mark/releases)
- [Changelog](https://github.com/ZhongxuYang/vite-plugin-version-mark/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ZhongxuYang/vite-plugin-version-mark/compare/v0.1.0...v0.1.1)

---
updated-dependencies:
- dependency-name: vite-plugin-version-mark
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-19 16:22:15 +03:00
dependabot[bot]
281d908d3f
Bump ra-language-english from 5.2.0 to 5.3.0 (#71)
Bumps [ra-language-english](https://github.com/marmelab/react-admin) from 5.2.0 to 5.3.0.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.2.0...v5.3.0)

---
updated-dependencies:
- dependency-name: ra-language-english
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-19 16:21:57 +03:00
dependabot[bot]
bacc42fe9c
Bump react-router-dom from 6.26.2 to 6.27.0 (#70)
Bumps [react-router-dom](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom) from 6.26.2 to 6.27.0.
- [Release notes](https://github.com/remix-run/react-router/releases)
- [Changelog](https://github.com/remix-run/react-router/blob/react-router-dom@6.27.0/packages/react-router-dom/CHANGELOG.md)
- [Commits](https://github.com/remix-run/react-router/commits/react-router-dom@6.27.0/packages/react-router-dom)

---
updated-dependencies:
- dependency-name: react-router-dom
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-19 16:21:44 +03:00
dependabot[bot]
1c26a28ca9
Bump react-hook-form from 7.53.0 to 7.53.1 (#69)
Bumps [react-hook-form](https://github.com/react-hook-form/react-hook-form) from 7.53.0 to 7.53.1.
- [Release notes](https://github.com/react-hook-form/react-hook-form/releases)
- [Changelog](https://github.com/react-hook-form/react-hook-form/blob/master/CHANGELOG.md)
- [Commits](https://github.com/react-hook-form/react-hook-form/compare/v7.53.0...v7.53.1)

---
updated-dependencies:
- dependency-name: react-hook-form
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-19 16:21:33 +03:00
dependabot[bot]
d3a04cd132
Bump @vitejs/plugin-react from 4.3.1 to 4.3.2 (#67)
Bumps [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/tree/HEAD/packages/plugin-react) from 4.3.1 to 4.3.2.
- [Release notes](https://github.com/vitejs/vite-plugin-react/releases)
- [Changelog](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite-plugin-react/commits/v4.3.2/packages/plugin-react)

---
updated-dependencies:
- dependency-name: "@vitejs/plugin-react"
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-19 16:20:58 +03:00
dependabot[bot]
e6060a23ac
Bump @types/node from 20.16.5 to 22.7.7 (#66)
Bumps [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) from 20.16.5 to 22.7.7.
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

---
updated-dependencies:
- dependency-name: "@types/node"
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-19 16:20:43 +03:00
dependabot[bot]
4b7fbf483a
Bump typescript from 5.6.2 to 5.6.3 (#65)
Bumps [typescript](https://github.com/microsoft/TypeScript) from 5.6.2 to 5.6.3.
- [Release notes](https://github.com/microsoft/TypeScript/releases)
- [Changelog](https://github.com/microsoft/TypeScript/blob/main/azure-pipelines.release.yml)
- [Commits](https://github.com/microsoft/TypeScript/compare/v5.6.2...v5.6.3)

---
updated-dependencies:
- dependency-name: typescript
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-19 16:20:31 +03:00
dependabot[bot]
bc3c30da92
Bump @testing-library/jest-dom from 6.5.0 to 6.6.2 (#64)
Bumps [@testing-library/jest-dom](https://github.com/testing-library/jest-dom) from 6.5.0 to 6.6.2.
- [Release notes](https://github.com/testing-library/jest-dom/releases)
- [Changelog](https://github.com/testing-library/jest-dom/blob/main/CHANGELOG.md)
- [Commits](https://github.com/testing-library/jest-dom/compare/v6.5.0...v6.6.2)

---
updated-dependencies:
- dependency-name: "@testing-library/jest-dom"
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-19 16:20:02 +03:00
dependabot[bot]
1896f770d1
Bump ra-core from 5.2.0 to 5.3.0 (#63)
Bumps [ra-core](https://github.com/marmelab/react-admin) from 5.2.0 to 5.3.0.
- [Release notes](https://github.com/marmelab/react-admin/releases)
- [Changelog](https://github.com/marmelab/react-admin/blob/master/CHANGELOG.md)
- [Commits](https://github.com/marmelab/react-admin/compare/v5.2.0...v5.3.0)

---
updated-dependencies:
- dependency-name: ra-core
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-19 16:19:34 +03:00
dependabot[bot]
99d0b9ad72
Bump docker/setup-buildx-action from 1 to 3 (#62)
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 1 to 3.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v1...v3)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-10-19 16:19:06 +03:00
Aine
944afb9056
bring back dependabot config 2024-10-19 16:15:23 +03:00
Aine
23f5a24803
update README.md 2024-10-19 15:57:12 +03:00
Borislav Pantaleev
60ae00ac14
Add seprate login button for access token (#61) 2024-10-19 12:03:46 +00:00
Borislav Pantaleev
26862fa708
Add etke.cc to footer and package.json (#60)
* Add etke.cc to footer and package.json

* more links
2024-10-19 11:24:45 +03:00
Aine
853d14c1ce
fix 'Sign in' button disabled on SSO-only servers when attempting access token login 2024-10-18 10:21:48 +03:00
jamazi
11a5cac709
Refactor required fields check on Bulk CSV upload (#59)
Related to https://github.com/etkecc/synapse-admin/pull/32
2024-10-17 22:56:19 +03:00
Borislav Pantaleev
0d021021df
Add option for access token login (#58)
* Fix SSO login flow, redirect is done after auth

* Add accessToken login

* Add confirmation for session destroy on accessToken logout

* add translations, fix tests, minor renaming

* update readme
2024-10-17 18:34:20 +03:00
Aine
19302466ef
update README.md 2024-10-10 22:13:50 +03:00
Aine
0594259ae4
make avatar field sortable in the users list 2024-10-08 12:15:03 +03:00
Aine
ba485bbb18
Merge branch 'master' 2024-10-08 10:51:16 +03:00
Aine
f5d6f24b30
correctly treat empty or "almost empty" restrictBaseUrl config option, fixes #56 2024-10-07 12:00:33 +03:00
Aine
a42efe7eda
do not color failed federation destinations, use an icon instead 2024-10-04 00:16:11 +03:00
Borislav Pantaleev
31d3712dbb
Better media preview/download implementation (#53)
* Add download option for non image media

* make view media button change the icon during the loading; update readme
2024-10-03 11:23:51 +03:00
Aine
a15dad4a31
ensure preview works for images only (for now) 2024-10-03 01:18:45 +03:00
Borislav Pantaleev
9062a6afb1 Remove Dialog window for image preview, open all media in new tab 2024-10-03 00:52:07 +03:00
Borislav Pantaleev
a79c3597d6
Authenticated Media Support (#51)
* Fix AvatarField to work with authenticated media

* Fix ViewMediaButton to work for user's media tab and reported events

* remove console.log

* cleanup AvatarField

* use correct thumbnail size

* fix AvatarField.test

* ignore postgres data for watchman

* fix new avatar preview

* watchman should ignore testdata completely, instead of specific subdirs

* update README

* change user's media icon in sidebar - use the same icon as the media tab

* Add preview for user media files if mimeType is image/*

* Add new line in user media Dialog
2024-10-03 00:38:35 +03:00
Aine
470f1b5455
adjust 'redact all user events on remove' to the new API 2024-10-02 23:34:07 +03:00
Aine
46cc0e2fda
refactor users' after delete to react-admin lifecycle hooks, fixes #50 2024-09-29 19:46:00 +03:00
Aine
f3080e9468
Provide options to delete media and redact events on user erase (#49)
* Provide options to delete media and redact events on user erase

* update readme
2024-09-29 00:16:44 +03:00
Aine
f8fe1166e2
Do not block deleted rooms from being rejoined by default (UI option), fixes #48 2024-09-27 19:25:15 +03:00
Borislav Pantaleev
02bee92806
Fix missing QueryClient (#47) 2024-09-26 21:42:09 +00:00
Aine
b7f8e03894
update README 2024-09-25 19:26:26 +03:00
Aine
59bb4b4183
update README 2024-09-25 19:10:43 +03:00
Aine
bb53d53692
Add Contact support button (#45) 2024-09-25 19:09:58 +03:00
Aine
52a2f1c936
reword managed user error 2024-09-24 21:58:24 +03:00
Aine
e328380c77
Restrict actions on specific users (#42)
* Restrict actions on specific users

* update readme
2024-09-24 13:25:29 +03:00
dependabot[bot]
a277ded227
Bump rollup from 4.22.0 to 4.22.4 (#41)
Bumps [rollup](https://github.com/rollup/rollup) from 4.22.0 to 4.22.4.
- [Release notes](https://github.com/rollup/rollup/releases)
- [Changelog](https://github.com/rollup/rollup/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rollup/rollup/compare/v4.22.0...v4.22.4)

---
updated-dependencies:
- dependency-name: rollup
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-24 10:18:09 +03:00
Borislav Pantaleev
48d933e028
Upgrade react-admin to version 5 (#40)
* wip on ra upgrade

* Finish upgrade

* fix package.json

* pr fixes

* more pr fixes

* update readme
2024-09-24 10:02:47 +03:00
Aine
24cf0a60bf
Expose user avatar URL field in the UI (#27)
* wip

* some fixes

* update readme

* update readme

* Add option to change/erase any user's avatar

* Fix README

* Remove mutationMode from Edit

* remove log

* update readme
2024-09-17 23:06:12 +03:00
dependabot[bot]
d5113aad72
Bump dompurify from 2.5.0 to 2.5.6 (#35)
Bumps [dompurify](https://github.com/cure53/DOMPurify) from 2.5.0 to 2.5.6.
- [Release notes](https://github.com/cure53/DOMPurify/releases)
- [Commits](https://github.com/cure53/DOMPurify/compare/2.5.0...2.5.6)

---
updated-dependencies:
- dependency-name: dompurify
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-09-17 20:34:41 +03:00
Aine
6957cb1f7d
Fix Bulk registration invalid MXID in requests, fixes #30 (#33)
* Fix Bulk registration invalid MXID in requests

* update readme
2024-09-17 14:02:41 +03:00
Aine
66c706532a
Fix required fields check on Bulk registration CSV upload, fixes #29 (#32) 2024-09-17 13:17:07 +03:00
Aine
332e98a095
add dev stack 2024-09-17 12:54:29 +03:00
Aine
f639a1c9ff
rename release artifact file 2024-09-14 21:36:03 +03:00
Aine
8282bb0926
add github release CI step 2024-09-14 21:32:36 +03:00
Aine
264d2ff59d
add on-tags CI build 2024-09-14 21:14:22 +03:00
Aine
90a6c7d8c2
switch to tag-based build 2024-09-14 21:09:58 +03:00
Borislav Pantaleev
7de9166648
Add UI option to block deleted rooms from being rejoined (#26)
Add UI option to block deleted rooms from being rejoined
This is almost a copy of https://github.com/Awesome-Technologies/synapse-admin/pull/166 PR,
authored by @jkanefendt
2024-09-14 11:03:51 +03:00
Borislav Pantaleev
0bf3440fc8
Federation page improvements for dark mode and last_entry without a date (#19)
Federation page improvements
This is almost a copy of https://github.com/Awesome-Technologies/synapse-admin/pull/583 PR,
authored by @rkfg
2024-09-06 00:23:23 +03:00
Aine
cceae77529
fix ci 2024-09-06 00:20:37 +03:00
Aine
1474b46ff0
Put version into the manifest.json on CI builds (Docker, CDN, etc.)
This commit fixes the https://github.com/Awesome-Technologies/synapse-admin/issues/507 issue.
While it's a mere workaround, it may help until the
https://github.com/Awesome-Technologies/synapse-admin/issues/507#issuecomment-2063845882 is implemented
2024-09-06 00:15:00 +03:00
Aine
01e3947b22
add missing translations 2024-09-05 23:52:27 +03:00
Borislav Pantaleev
e093bd8625
Fix base_url being undefined on unsuccessful login (#18)
* Fix base_url being undefined on unsuccessful login

* update readme
2024-09-05 23:23:17 +03:00
Borislav Pantaleev
390aab5ce7
Display actual synapse errors (#17)
* Display actual synapse errors

* Show actual errors from dataProvider requests

* update README
2024-09-05 21:39:39 +03:00
Aine
fb1a04971b
[skip ci] add justfile 2024-09-05 09:50:06 +03:00
Borislav Pantaleev
eff17a0929
Fix redirect URL after user creation (#16)
* Fix redirect URL after user creation

* increment version; update readme
2024-09-05 09:02:46 +03:00
Aine
8eaaaa50ec
cleanup .dockerignore 2024-09-03 16:07:43 +03:00
Aine
85b305d117
ensure the latest version is checked out 2024-09-03 16:01:41 +03:00
Aine
4cbea6ffb6
enable cdn 2024-09-03 15:55:29 +03:00
Aine
1967546ae4
enable docker action to see how it goes 2024-09-03 15:50:11 +03:00
Aine
c9a3294852
use different path 2024-09-03 15:44:50 +03:00
Aine
f1839387e2
fix ci 2024-09-03 15:41:38 +03:00
Aine
c8246a1d19
try ci artifacts 2024-09-03 15:40:23 +03:00
Aine
3c6259cc88
Revert "switch from nginx to SWS for serving the app (docker image)", as it causes issues with CDN deploy - workflow
should be adjusted first

This reverts commit 317df5af0f59052869f4cd43cfb7d9830da416ef.
2024-09-03 14:04:32 +03:00
Aine
317df5af0f
switch from nginx to SWS for serving the app (docker image) 2024-09-03 14:02:35 +03:00
Aine
2142770a5b
Fix footer overlapping content
This is almost a copy of https://github.com/Awesome-Technologies/synapse-admin/issues/574#issue-2406841809 suggestion,
authored by @ll-SKY-ll
2024-09-03 13:46:31 +03:00
Aine
51297b49fc
v0.10.3-etke5 2024-09-03 11:50:14 +03:00
Aine
311cc2a1f4
Merge pull request #9 from etkecc/fix-user-names-in-header
Fix user's display name in header on user's page
2024-09-03 11:48:43 +03:00
Aine
6bc760a6fa
Fix user's display name in header on user's page
For example, erased users don't have display name, so header was `User "null"`.
With this change, if there is no display name, the MXID will be show, e.g. `User "@user:example.com"`
2024-09-03 11:45:47 +03:00
Aine
50c96cfd77
Add ability to toggle whether to show locked users
This is almost copy of https://github.com/Awesome-Technologies/synapse-admin/pull/573 PR,
authored by @huw1990
2024-09-03 11:09:46 +03:00
Aine
7747dc7f28
Add identifier when authorizing with password
This PR is almost copy of https://github.com/Awesome-Technologies/synapse-admin/pull/601 PR,
authored by @dklimpel
2024-09-03 10:42:45 +03:00
Aine
678867e981
v0.10.3-etke2 2024-09-03 07:12:36 +03:00
Aine
4a4fae104e
Merge pull request #8 from etkecc/fix-users-edit-tab
Fix user's Edit action defualt Tab not being shown
2024-09-03 07:09:35 +03:00
Borislav Pantaleev
265b5157af Fix user's Edit action defualt Tab not being shown 2024-09-03 00:53:29 +03:00
Aine
b5b593945d
remove configure steps 2024-08-31 21:12:06 +03:00
Aine
15c8a30c92
fix ci 2024-08-31 21:04:39 +03:00
Aine
40c6eb0b95
fix ci 2024-08-31 20:58:07 +03:00
Aine
4c4e3a07f6
fix ci 2024-08-31 20:51:47 +03:00
Aine
35322fa01d
fix ci 2024-08-31 20:35:02 +03:00
Aine
88e88fb6b9
add CDN 2024-08-31 20:28:14 +03:00
Aine
7016e5a349
Update CONTRIBUTING.md 2024-08-31 16:17:28 +03:00
Aine
c7e275d4ec
Create CONTRIBUTING.md 2024-08-31 16:16:22 +03:00
Aine
b1d3340fce
Merge pull request #7 from etkecc/dependabot/npm_and_yarn/micromatch-4.0.8
Bump micromatch from 4.0.5 to 4.0.8
2024-08-31 15:27:02 +03:00
dependabot[bot]
2ae5930578
Bump micromatch from 4.0.5 to 4.0.8
Bumps [micromatch](https://github.com/micromatch/micromatch) from 4.0.5 to 4.0.8.
- [Release notes](https://github.com/micromatch/micromatch/releases)
- [Changelog](https://github.com/micromatch/micromatch/blob/master/CHANGELOG.md)
- [Commits](https://github.com/micromatch/micromatch/compare/4.0.5...4.0.8)

---
updated-dependencies:
- dependency-name: micromatch
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-08-31 12:25:16 +00:00
Aine
9dd6940383
Merge pull request #6 from etkecc/fix-ci
update links, allow working without tags
2024-08-31 15:15:27 +03:00
Aine
e2194f5c49
update links, allow working without tags 2024-08-31 15:14:44 +03:00
Aine
e6dcbcb052
Merge pull request #5 from etkecc/fix-ci
set fetch-depth
2024-08-31 15:00:40 +03:00
Aine
5acf3042c3
set fetch-depth 2024-08-31 15:00:10 +03:00
Aine
7286abaaae
Merge pull request #4 from etkecc/fix-ci
add checkout
2024-08-31 14:57:40 +03:00
Aine
0d5e95fa7c
add checkout 2024-08-31 14:57:07 +03:00
Aine
c4b54c40fb
Merge pull request #3 from etkecc/fix-ci
fix ci
2024-08-31 14:55:58 +03:00
Aine
ec0b980e06
fix ci 2024-08-31 14:54:52 +03:00
Aine
94ccd3ad36
Merge pull request #2 from etkecc/add-ci
update CI and readme
2024-08-31 14:49:17 +03:00
Aine
49d67f9130
update CI and readme 2024-08-31 14:47:33 +03:00
Aine
2bb846734e
Merge pull request #1 from etkecc/prevent-self-delete
Prevent self user delete
2024-08-31 09:33:00 +03:00
Borislav Pantaleev
056d9c6b4c Prevent self user delete 2024-08-31 01:00:29 +03:00
131 changed files with 15470 additions and 10516 deletions

View File

@ -1,13 +1 @@
# Exclude a bunch of stuff which can make the build context a larger than it needs to be
tests/
build/
dist/
lib/
node_modules/
electron_app/
karma-reports/
.pnp.cjs
.pnp.loader.mjs
.idea/
.tmp/
config.json*
/testdata

View File

@ -0,0 +1,33 @@
name: Build Application
on:
push:
tags:
- 'v*.*'
workflow_dispatch:
jobs:
build:
runs-on: large
steps:
# Шаг 1: Checkout кода
- name: Checkout repository
uses: actions/checkout@v3
# Шаг 2: Логин в Docker Registry (Gitea)
- name: Login to Gitea Container Registry
uses: docker/login-action@v3
with:
registry: ${{ vars.GIT_INSTANCE }} # Замените на адрес вашего Gitea
username: ${{ secrets.GIT_USERNAME }}
password: ${{ secrets.GIT_TOKEN }}
# Шаг 3: Сборка и пуш Docker образа
- name: Build and push Docker image
uses: docker/build-push-action@v5
with:
context: ./
push: true
tags: |
${{ vars.GIT_INSTANCE }}/${{ secrets.GIT_USERNAME }}/${{ vars.REPOSITORY }}:latest
${{ vars.GIT_INSTANCE }}/${{ secrets.GIT_USERNAME }}/${{ vars.REPOSITORY }}:${{ github.sha }}

View File

@ -1,20 +0,0 @@
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
ignore:
# Major updates for react-admin have breaking changes
- dependency-name: "react-admin"
update-types: ["version-update:semver-major"]
- package-ecosystem: "docker"
directory: "/"
schedule:
interval: "weekly"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"

View File

@ -1,26 +0,0 @@
name: build-test
on:
push:
branches: ["master"]
pull_request:
permissions:
contents: read
jobs:
check:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: "18"
- name: Install dependencies
run: yarn --immutable
- name: Run checks
run: yarn lint
- name: Run tests
run: yarn test

View File

@ -1,63 +0,0 @@
name: Create docker image(s) and push to docker hub and ghcr.io
# see https://docs.github.com/en/actions/publishing-packages/publishing-docker-images#publishing-images-to-docker-hub-and-github-packages
on:
push:
# Sequence of patterns matched against refs/heads
# prettier-ignore
branches:
# Push events on master branch
- master
# Sequence of patterns matched against refs/tags
tags:
- '[0-9]+\.[0-9]+\.[0-9]+' # Push events to 0.X.X tag
jobs:
docker:
name: Push Docker image to multiple registries
runs-on: ubuntu-latest
permissions:
packages: write
contents: read
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to GHCR
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: |
awesometechnologies/synapse-admin
ghcr.io/${{ github.repository }}
- name: Build and Push Tag
uses: docker/build-push-action@v6
with:
context: .
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: linux/amd64,linux/arm64

View File

@ -1,31 +0,0 @@
name: Build and Deploy Edge version to GH Pages
on:
workflow_dispatch:
push:
branches:
- main
- master
permissions:
contents: write
jobs:
build-and-deploy:
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎️
uses: actions/checkout@v4
with:
fetch-depth: 100
fetch-tags: true
- uses: actions/setup-node@v4
with:
node-version: "20"
- name: Install and Build 🔧
run: |
yarn install --immutable
yarn build --base=/synapse-admin
- name: Deploy 🚀
uses: JamesIves/github-pages-deploy-action@v4.7.3
with:
branch: gh-pages
folder: dist

View File

@ -1,30 +0,0 @@
name: Create release tarball and attach to tag
on:
push:
tags:
- "*"
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: write
packages: write
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: "20"
- run: yarn install --immutable
- run: yarn build
- run: |
version=`git describe --dirty --tags || echo unknown`
cp -r dist synapse-admin-$version
tar chvzf dist/synapse-admin-$version.tar.gz synapse-admin-$version
- uses: softprops/action-gh-release@da05d552573ad5aba039eaac05058a918a7bf631
with:
files: dist/*.tar.gz
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

3
.gitignore vendored
View File

@ -191,3 +191,6 @@ sketch
# .pnp.*
# End of https://www.toptal.com/developers/gitignore/api/node,yarn,react,visualstudiocode
/testdata/synapse.data
/testdata/postgres.data

View File

@ -5,6 +5,6 @@
},
"eslint.nodePath": ".yarn/sdks",
"prettier.prettierPath": ".yarn/sdks/prettier/index.cjs",
"typescript.tsdk": ".yarn/sdks/typescript/lib",
"typescript.tsdk": "node_modules/typescript/lib",
"typescript.enablePromptUseWorkspaceTsdk": true
}

5
.watchmanconfig Normal file
View File

@ -0,0 +1,5 @@
{
"ignore_dirs": [
"testdata"
]
}

View File

@ -1 +0,0 @@
yarnPath: .yarn/releases/yarn-4.4.1.cjs

View File

@ -1,26 +1,11 @@
# Builder
FROM node:lts as builder
LABEL org.opencontainers.image.url=https://github.com/Awesome-Technologies/synapse-admin org.opencontainers.image.source=https://github.com/Awesome-Technologies/synapse-admin
# Base path for synapse admin
FROM node:lts AS builder
ARG BASE_PATH=./
WORKDIR /src
# Copy .yarn directory to the working directory (must be on a separate line!)
# Use https://docs.docker.com/engine/reference/builder/#copy---parents when available
COPY .yarn .yarn
COPY package.json .yarnrc.yml yarn.lock ./
# Disable telemetry and install packages
RUN yarn config set enableTelemetry 0 && yarn install --immutable --network-timeout=300000
COPY . /src
RUN yarn build --base=$BASE_PATH
# App
FROM nginx:stable-alpine
RUN yarn config set enableTelemetry 0 && \
yarn install --immutable --network-timeout=300000 && \
yarn build --base=$BASE_PATH
FROM ghcr.io/static-web-server/static-web-server:2
ENV SERVER_ROOT=/app
COPY --from=builder /src/dist /app
RUN rm -rf /usr/share/nginx/html \
&& ln -s /app /usr/share/nginx/html

5
Dockerfile.old Normal file
View File

@ -0,0 +1,5 @@
FROM ghcr.io/static-web-server/static-web-server:2
ENV SERVER_ROOT=/app
COPY ./dist /app

286
README.md
View File

@ -1,19 +1,218 @@
[![GitHub license](https://img.shields.io/github/license/Awesome-Technologies/synapse-admin)](https://github.com/Awesome-Technologies/synapse-admin/blob/master/LICENSE)
[![Build Status](https://api.travis-ci.com/Awesome-Technologies/synapse-admin.svg?branch=master)](https://app.travis-ci.com/github/Awesome-Technologies/synapse-admin)
[![build-test](https://github.com/Awesome-Technologies/synapse-admin/actions/workflows/build-test.yml/badge.svg)](https://github.com/Awesome-Technologies/synapse-admin/actions/workflows/build-test.yml)
[![gh-pages](https://github.com/Awesome-Technologies/synapse-admin/actions/workflows/edge_ghpage.yml/badge.svg)](https://awesome-technologies.github.io/synapse-admin/)
[![docker-release](https://github.com/Awesome-Technologies/synapse-admin/actions/workflows/docker-release.yml/badge.svg)](https://hub.docker.com/r/awesometechnologies/synapse-admin)
[![github-release](https://github.com/Awesome-Technologies/synapse-admin/actions/workflows/github-release.yml/badge.svg)](https://github.com/Awesome-Technologies/synapse-admin/releases)
<p align="center">
<img alt="Synapse Admin Logo" src="./public/images/logo.webp" height="140" />
<h3 align="center">
Synapse Admin<br>
<a href="https://matrix.to/#/#synapse-admin:etke.cc">
<img alt="Community room" src="https://img.shields.io/badge/room-community_room-green?logo=matrix&label=%23synapse-admin%3Aetke.cc">
</a><br>
<a href="./LICENSE">
<img alt="License" src="https://img.shields.io/github/license/etkecc/synapse-admin">
</a>
</h3>
<p align="center">Feature-packed and visually customizable: A better way to manage your Synapse homeserver.</p>
</p>
# Synapse admin ui
---
This project is built using [react-admin](https://marmelab.com/react-admin/).
![Login form showing dark and light modes](./screenshots/auth.webp)
![Screenshots](./screenshots/screenshots.jpg)
<!-- vim-markdown-toc GFM -->
* [Fork differences](#fork-differences)
* [Changes](#changes)
* [exclusive for etke.cc customers](#exclusive-for-etkecc-customers)
* [Development](#development)
* [Support](#support)
* [Configuration](#configuration)
* [Prefilling login form](#prefilling-login-form)
* [Restricting available homeserver](#restricting-available-homeserver)
* [Configuring CORS credentials](#configuring-cors-credentials)
* [Protecting appservice managed users](#protecting-appservice-managed-users)
* [Adding custom menu items](#adding-custom-menu-items)
* [Usage](#usage)
* [Supported Synapse](#supported-synapse)
* [Prerequisites](#prerequisites)
* [Use without install](#use-without-install)
* [Step-By-Step install](#step-by-step-install)
* [Steps for 1)](#steps-for-1)
* [Steps for 2)](#steps-for-2)
* [Steps for 3)](#steps-for-3)
* [Serving Synapse Admin on a different path](#serving-synapse-admin-on-a-different-path)
* [Development](#development-1)
<!-- vim-markdown-toc -->
## Fork differences
With [Awesome-Technologies/synapse-admin](https://github.com/Awesome-Technologies/synapse-admin) as the upstream,
this fork introduces numerous enhancements to improve usability and extend functionality,
including support for authenticated media, advanced user management options, and visual customization.
The full list is described below in the [Changes](#changes) section.
**Availability**
* As a core/default component on [etke.cc](https://etke.cc/?utm_source=github&utm_medium=readme&utm_campaign=synapse-admin)
* As a standalone app on [admin.etke.cc](https://admin.etke.cc)
* As a prebuilt distribution on [GitHub Releases](https://github.com/etkecc/synapse-admin/releases)
* As a Docker container on [Docker Hub](https://hub.docker.com/r/etkecc/synapse-admin) and [GitHub Container Registry](https://github.com/etkecc/synapse-admin/pkgs/container/synapse-admin)
* As a component in [Matrix-Docker-Ansible-Deploy Playbook](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/master/docs/configuring-playbook-synapse-admin.md)
### Changes
_the list will be updated as new changes are added_
The following changes are already implemented:
* 🛑 [Prevent admins from deleting themselves](https://github.com/etkecc/synapse-admin/pull/1)
* 🐛 [Fix user's default tab not being shown](https://github.com/etkecc/synapse-admin/pull/8)
* 🔑 [Add identifier when authorizing with password](https://github.com/Awesome-Technologies/synapse-admin/pull/601)
* 🔒 [Add ability to toggle whether to show locked users](https://github.com/Awesome-Technologies/synapse-admin/pull/573)
* 🖊️ [Fix user's display name in header on user's page](https://github.com/etkecc/synapse-admin/pull/9)
* 🧹 [Fix footer overlapping content](https://github.com/Awesome-Technologies/synapse-admin/issues/574)
* 🐋 Switch from nginx to [SWS](https://static-web-server.net/) for serving the app, reducing the size of the Docker image
* 🔄 [Fix redirect URL after user creation](https://github.com/etkecc/synapse-admin/pull/16)
* 🔍 [Display actual Synapse errors](https://github.com/etkecc/synapse-admin/pull/17)
* ⚠️ [Fix base_url being undefined on unsuccessful login](https://github.com/etkecc/synapse-admin/pull/18)
* 📜 [Put the version into manifest.json](https://github.com/Awesome-Technologies/synapse-admin/issues/507) (later replaced with a proper manifest.json generation on build)
* 📊 [Federation page improvements](https://github.com/Awesome-Technologies/synapse-admin/pull/583) (using icons)
* 🚪 [Add UI option to block deleted rooms from being rejoined](https://github.com/etkecc/synapse-admin/pull/26)
* 🛠️ [Fix required fields check on Bulk registration CSV upload](https://github.com/etkecc/synapse-admin/pull/32)
* 🛡️ [Fix requests with invalid MXIDs on Bulk registration](https://github.com/etkecc/synapse-admin/pull/33)
* 🖼️ [Expose user avatar URL field in the UI](https://github.com/etkecc/synapse-admin/pull/27)
* 🚀 [Upgrade react-admin to v5](https://github.com/etkecc/synapse-admin/pull/40)
* 🔒 [Restrict actions on specific users](https://github.com/etkecc/synapse-admin/pull/42)
* 📞 [Add `Contact support` menu item](https://github.com/etkecc/synapse-admin/pull/45)
* 🧹 [Provide options to delete media and redact events on user erase](https://github.com/etkecc/synapse-admin/pull/49)
* 🎞️ [Authenticated Media support](https://github.com/etkecc/synapse-admin/pull/51)
* 👁️ [Better media preview/download](https://github.com/etkecc/synapse-admin/pull/53)
* 🔐 [Login with access token](https://github.com/etkecc/synapse-admin/pull/58)
* 📏 [Fix footer causing vertical scrollbar](https://github.com/etkecc/synapse-admin/pull/60)
* 🍴 [Custom Menu Items](https://github.com/etkecc/synapse-admin/pull/79)
* 🧑‍💻 [Add user profile to the top menu](https://github.com/etkecc/synapse-admin/pull/80)
* 🎨 [Enable visual customization](https://github.com/etkecc/synapse-admin/pull/81)
* 🛋️ [Fix room state events display](https://github.com/etkecc/synapse-admin/pull/100)
* 🧹 [Sanitize CSV on import](https://github.com/etkecc/synapse-admin/pull/101)
* ⚙️ Allow setting version using `SYNAPSE_ADMIN_VERSION` environment variable on build (if git is not available)
* 🧪 [Add option to control user's experimental features](https://github.com/etkecc/synapse-admin/pull/111)
* 🔑 [Add random password generation on user create/edit form](https://github.com/etkecc/synapse-admin/pull/123)
* 🚦 [Add option to set user's rate limits](https://github.com/etkecc/synapse-admin/pull/125)
* 🌐 [Support configuration via /.well-known/matrix/client](https://github.com/etkecc/synapse-admin/pull/126)
* 🛑 [Prevent accidental user overwrites](https://github.com/etkecc/synapse-admin/pull/139)
* 🔍 [Allow providing login form details via GET params](https://github.com/etkecc/synapse-admin/pull/140)
* 🎨 [Add preferred theme colors to login page and footer](https://github.com/etkecc/synapse-admin/pull/155)
* 🛡️ [Add "Assign Admin" button to the rooms](https://github.com/etkecc/synapse-admin/pull/156)
* 🖼️ [Add rooms' avatars](https://github.com/etkecc/synapse-admin/pull/158)
* 🏷️ [User Badges](https://github.com/etkecc/synapse-admin/pull/160)
* 🔄 [Allow prefilling any fields on the login form via GET params](https://github.com/etkecc/synapse-admin/pull/181)
* 🎞️ [Add "Media" tab for rooms](https://github.com/etkecc/synapse-admin/pull/196)
* 📞 [Support E.164-based Matrix IDs (MSC4009)](https://github.com/etkecc/synapse-admin/pull/214)
* 🛑 [Add support for Account Suspension (MSC3823)](https://github.com/etkecc/synapse-admin/pull/195)
* 🗑️ [Add "Purge Remote Media" button](https://github.com/etkecc/synapse-admin/pull/237)
* 📁 [Respect base url (`BASE_PATH` / `vite build --base`) when loading `config.json`](https://github.com/etkecc/synapse-admin/pull/274)
* 🗂️ [Add Users' Account Data tab](https://github.com/etkecc/synapse-admin/pull/276)
* 🧾 [Make bulk registration CSV import more user-friendly](https://github.com/etkecc/synapse-admin/pull/411)
* 🌐 [Configurable CORS Credentials](https://github.com/etkecc/synapse-admin/pull/456)
* 🧪 [Do not check homeserver URL during typing in the login form](https://github.com/etkecc/synapse-admin/pull/585)
* 🔧 [Improve user account status toggles](https://github.com/etkecc/synapse-admin/pull/608)
* 🛡️ [Validate that password is entered upon reactivation of account](https://github.com/etkecc/synapse-admin/pull/609)
* 🌏 [Add Japanese localization](https://github.com/etkecc/synapse-admin/pull/631)
* 🗣️ [Correctly set document language based on the selected locale](https://github.com/etkecc/synapse-admin/issues/723)
#### exclusive for [etke.cc](https://etke.cc) customers
We at [etke.cc](https://etke.cc) attempting to develop everything open-source, but some things are too specific to be used by anyone else.
The following list contains such features - they are only available for [etke.cc](https://etke.cc) customers.
* 📊 [Server Status indicator and page](https://github.com/etkecc/synapse-admin/pull/182)
* 📬 [Server Notifications indicator and page](https://github.com/etkecc/synapse-admin/pull/240)
* 🛠️ [Server Commands panel](https://github.com/etkecc/synapse-admin/pull/365)
* 🚀 [Server Actions page](https://github.com/etkecc/synapse-admin/pull/457)
* 💳 [Billing page](https://github.com/etkecc/synapse-admin/pull/691)
### Development
`just run-dev` to start the development stack (depending on your system speed, you may want to re-run this command if
user creation fails)
This command initializes the development environment (local Synapse server, Element Web client app, and Postgres DB),
and launches the app in a dev mode at `http://localhost:5173`
After that open [http://localhost:5173](http://localhost:5173?username=admin&password=admin&server=http://localhost:8008) in your browser,
login using the following credentials:
* Login: admin
* Password: admin
* Homeserver URL: http://localhost:8008
Element Web runs on http://localhost:8080
### Support
If you have any questions or need help, feel free to join the [community room](https://matrix.to/#/#synapse-admin:etke.cc) or create an issue on GitHub.
## Configuration
You can use `config.json` file to configure Synapse Admin instance,
and `/.well-known/matrix/client` file to provide Synapse Admin configuration specifically for your homeserver.
In the latter case, any instance of Synapse Admin will automatically pick up the configuration from the homeserver.
Note that configuration inside the `/.well-known/matrix/client` file should go under the `cc.etke.synapse-admin` key,
and it will override the configuration from the `config.json` file.
In case you use [spantaleev/matrix-docker-ansible-deploy](https://github.com/spantaleev/matrix-docker-ansible-deploy) or
[etkecc/ansible](https://github.com/etkecc/ansible),
configuration will be automatically added to the `/.well-known/matrix/client` file.
[Configuration options](./docs/config.md)
The `config.json` can be injected into a Docker container using a bind mount.
```yml
services:
synapse-admin:
...
volumes:
./config.json:/app/config.json:ro
...
```
### Prefilling login form
You can prefill all fields on the login page using GET parameters.
[Documentation](./docs/prefill-login-form.md)
### Restricting available homeserver
You can restrict the homeserver(s), so that the user can no longer define it himself.
[Documentation](./docs/restrict-hs.md)
### Configuring CORS credentials
You can configure the CORS credentials mode for the Synapse Admin instance.
[Documentation](./docs/cors-credentials.md)
### Protecting appservice managed users
To avoid accidental adjustments of appservice-managed users (e.g., puppets created by a bridge) and breaking the bridge,
you can specify the list of MXIDs (regexp) that should be prohibited from any changes, except display name and avatar.
[Documentation](./docs/system-users.md)
### Adding custom menu items
You can add custom menu items to the main menu by providing a `menu` array in the config.
[Documentation](./docs/custom-menu.md)
## Usage
### Supported Synapse
It needs at least [Synapse](https://github.com/element-hq/synapse) v1.93.0 for all functions to work as expected!
It needs at least [Synapse](https://github.com/element-hq/synapse) v1.116.0 for all functions to work as expected!
You get your server version with the request `/_synapse/admin/v1/server_version`.
See also [Synapse version API](https://element-hq.github.io/synapse/latest/admin_api/version_api.html).
@ -32,7 +231,7 @@ See also [Synapse administration endpoints](https://element-hq.github.io/synapse
### Use without install
You can use the current version of Synapse Admin without own installation direct
via [GitHub Pages](https://awesome-technologies.github.io/synapse-admin/).
via [admin.etke.cc](https://admin.etke.cc).
**Note:**
If you want to use the deployment, you have to make sure that the admin endpoints (`/_synapse/admin`) are accessible for your browser.
@ -51,22 +250,24 @@ You have three options:
- make sure you have a webserver installed that can serve static files (any webserver like nginx or apache will do)
- configure a vhost for synapse admin on your webserver
- download the .tar.gz from the latest release: https://github.com/Awesome-Technologies/synapse-admin/releases/latest
- download the .tar.gz [from the latest release](https://github.com/etkecc/synapse-admin/releases/latest)
- unpack the .tar.gz
- move or symlink the `synapse-admin-x.x.x` into your vhosts root dir
- move or symlink the `synapse-admin` into your vhosts root dir
- open the url of the vhost in your browser
[Reverse Proxy Documentation with Examples](./docs/reverse-proxy.md)
#### Steps for 2)
- make sure you have installed the following: git, yarn, nodejs
- download the source code: `git clone https://github.com/Awesome-Technologies/synapse-admin.git`
- download the source code: `git clone https://github.com/etkecc/synapse-admin.git`
- change into downloaded directory: `cd synapse-admin`
- download dependencies: `yarn install`
- start web server: `yarn start`
#### Steps for 3)
- run the Docker container from the public docker registry: `docker run -p 8080:80 awesometechnologies/synapse-admin` or use the [docker-compose.yml](docker-compose.yml): `docker-compose up -d`
- run the Docker container from the public docker registry: `docker run -p 8080:80 ghcr.io/etkecc/synapse-admin` or use the [docker-compose.yml](docker-compose.yml): `docker-compose up -d`
> note: if you're building on an architecture other than amd64 (for example a raspberry pi), make sure to define a maximum ram for node. otherwise the build will fail.
@ -76,7 +277,8 @@ You have three options:
container_name: synapse-admin
hostname: synapse-admin
build:
context: https://github.com/Awesome-Technologies/synapse-admin.git
context: https://github.com/etkecc/synapse-admin.git
dockerfile: Dockerfile.build
args:
- BUILDKIT_CONTEXT_KEEP_GIT_DIR=1
# - NODE_OPTIONS="--max_old_space_size=1024"
@ -88,38 +290,7 @@ You have three options:
- browse to http://localhost:8080
### Restricting available homeserver
You can restrict the homeserver(s), so that the user can no longer define it himself.
Edit `config.json` to restrict either to a single homeserver:
```json
{
"restrictBaseUrl": "https://your-matrixs-erver.example.com"
}
```
or to a list of homeservers:
```json
{
"restrictBaseUrl": ["https://your-first-matrix-server.example.com", "https://your-second-matrix-server.example.com"]
}
```
The `config.json` can be injected into a Docker container using a bind mount.
```yml
services:
synapse-admin:
...
volumes:
./config.json:/app/config.json:ro
...
```
### Serving Synapse-Admin on a different path
### Serving Synapse Admin on a different path
The path prefix where synapse-admin is served can only be changed during the build step.
@ -127,7 +298,7 @@ If you downloaded the source code, use `yarn build --base=/my-prefix` to set a p
If you want to build your own Docker container, use the `BASE_PATH` argument.
We do not support directly changing the path where Synapse-Admin is served in the pre-built Docker container. Instead please use a reverse proxy if you need to move Synapse-Admin to a different base path. If you want to serve multiple applications with different paths on the same domain, you need a reverse proxy anyway.
We do not support directly changing the path where Synapse Admin is served in the pre-built Docker container. Instead please use a reverse proxy if you need to move Synapse Admin to a different base path. If you want to serve multiple applications with different paths on the same domain, you need a reverse proxy anyway.
Example for Traefik:
@ -136,7 +307,7 @@ Example for Traefik:
```yml
services:
traefik:
image: traefik:mimolette
image: traefik:v3
restart: unless-stopped
ports:
- 80:80
@ -145,21 +316,18 @@ services:
- /var/run/docker.sock:/var/run/docker.sock:ro
synapse-admin:
image: awesometechnologies/synapse-admin:latest
image: ghcr.io/etkecc/synapse-admin:latest
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.synapse-admin.rule=Host(`example.com`)&&PathPrefix(`/admin`)"
- "traefik.http.routers.synapse-admin.middlewares=admin,admin_path"
- "traefik.http.middlewares.admin.redirectregex.regex=^(.*)/admin/?"
- "traefik.http.middlewares.admin.redirectregex.replacement=$${1}/admin/"
- "traefik.http.middlewares.admin_path.stripprefix.prefixes=/admin"
- "traefik.http.routers.admin.rule=Host(`example.com`) && PathPrefix(`/admin`)"
- "traefik.http.services.admin.loadbalancer.server.port=80"
- "traefik.http.middlewares.admin-slashless-redirect.redirectregex.regex=(/admin)$$"
- "traefik.http.middlewares.admin-slashless-redirect.redirectregex.replacement=$${1}/"
- "traefik.http.middlewares.admin-strip-prefix.stripprefix.prefixes=/admin"
- "traefik.http.routers.admin.middlewares=admin-slashless-redirect,admin-strip-prefix"
```
## Screenshots
![Screenshots](./screenshots.jpg)
## Development
- See https://yarnpkg.com/getting-started/editor-sdks how to setup your IDE

34
docker-compose-dev.yml Normal file
View File

@ -0,0 +1,34 @@
services:
synapse:
image: ghcr.io/element-hq/synapse:develop
entrypoint: python
command: "-m synapse.app.homeserver -c /config/homeserver.yaml"
ports:
- "8008:8008"
volumes:
- ./testdata/synapse:/config
- ./testdata/synapse.data:/media-store
postgres:
image: postgres:alpine
volumes:
- ./testdata/postgres.data:/var/lib/postgresql/data
environment:
POSTGRES_USER: synapse
POSTGRES_PASSWORD: synapse
POSTGRES_DB: synapse
POSTGRES_INITDB_ARGS: "--lc-collate C --lc-ctype C --encoding UTF8"
element:
image: docker.io/vectorim/element-web:latest
depends_on:
synapse:
condition: service_healthy
restart: true
ports:
- "8080:8080"
volumes:
- ./testdata/element/nginx.conf:/etc/nginx/nginx.conf:ro
- /dev/null:/etc/nginx/conf.d/default.conf:ro
- ./testdata/element/config.json:/app/config.json:ro

View File

@ -2,13 +2,14 @@ services:
synapse-admin:
container_name: synapse-admin
hostname: synapse-admin
image: awesometechnologies/synapse-admin:latest
image: ghcr.io/etkecc/synapse-admin:latest
# build:
# context: .
# dockerfile: Dockerfile.build
# to use the docker-compose as standalone without a local repo clone,
# replace the context definition with this:
# context: https://github.com/Awesome-Technologies/synapse-admin.git
# context: https://github.com/etkecc/synapse-admin.git
# args:
# - BUILDKIT_CONTEXT_KEEP_GIT_DIR=1

44
docs/README.md Normal file
View File

@ -0,0 +1,44 @@
# Documentation
Synapse Admin documentation is under construction right now, so PRs are greatly appreciated!
Table of contents:
<!-- vim-markdown-toc GFM -->
* [Configuration](#configuration)
* [Features](#features)
* [Deployment](#deployment)
<!-- vim-markdown-toc -->
## Configuration
[Full configuration documentation](./config.md)
Specific configuration options:
* [Customizing CORS credentials](./cors-credentials.md)
* [Restricting available homeserver](./restrict-hs.md)
* [System / Appservice-managed Users](./system-users.md)
* [Custom Menu Items](./custom-menu.md)
## Features
* [User Badges](./user-badges.md)
* [Prefilling the Login Form](./prefill-login-form.md)
for [etke.cc](https://etke.cc) customers only:
> **Note:** The following features are only available for etke.cc customers. Due to specifics of the implementation,
they are not available for any other Synapse Admin deployments.
* [Server Status icon](../src/components/etke.cc/README.md#server-status-icon)
* [Server Status page](../src/components/etke.cc/README.md#server-status-page)
* [Server Actions page](../src/components/etke.cc/README.md#server-actions-page)
* [Server Commands Panel](../src/components/etke.cc/README.md#server-commands-panel)
* [Server Notifications icon](../src/components/etke.cc/README.md#server-notifications-icon)
* [Server Notifications page](../src/components/etke.cc/README.md#server-notifications-page)
## Deployment
* [Serving Synapse Admin behind a reverse proxy](./reverse-proxy.md)

100
docs/config.md Normal file
View File

@ -0,0 +1,100 @@
# Configuration
Synapse Admin could be configured using the following ways (both are optional, and both could be used together):
* By providing the `config.json` file alongside with the Synapse Admin deployment, example: [admin.etke.cc/config.json](https://admin.etke.cc/config.json)
* By providing configuration under the `cc.etke.synapse-admin` key in the `/.well-known/matrix/client` file, example:
[demo.etke.host/.well-known/matrix/client](https://demo.etke.host/.well-known/matrix/client)
In case you are an [etke.cc](https://etke.cc) customer,
or use [spantaleev/matrix-docker-ansible-deploy](https://github.com/spantaleev/matrix-docker-ansible-deploy),
or [etkecc/ansible](https://github.com/etkecc/ansible),
configuration will be automatically added to the `/.well-known/matrix/client` file.
**Why `/.well-known/matrix/client`?**
Because any instance of Synapse Admin will automatically pick up the configuration from the homeserver.
Common use case when you have a Synapse server running, but don't want (or can't) deploy Synapse Admin alongside with it.
In this case, you could provide the configuration in the `/.well-known/matrix/client` file,
and any Synapse Admin instance (e.g., [admin.etke.cc](https://admin.etke.cc) will pick it up.
Another common case is when you have multiple Synapse servers running and want to use a single Synapse Admin instance to manage them all.
In this case, you could provide the configuration in the `/.well-known/matrix/client` file for each of the servers.
## Configuration options
* `restrictBaseUrl` - restrictBaseUrl restricts the Synapse Admin instance to work only with specific homeserver(-s).
It accepts both a string and an array of strings.
The homeserver URL should be the _actual_ homeserver URL, and not the delegated one.
Example: `https://matrix.example.com` or `https://synapse.example.net`
[More details](restrict-hs.md)
* `corsCredentials` - configure the CORS credentials for the Synapse Admin instance.
It accepts the following values:
* `same-origin` (default): Cookies will be sent only if the request is made from the same origin as the server.
* `include`: Cookies will be sent regardless of the origin of the request.
* `omit`: Cookies will not be sent with the request.
[More details](cors-credentials.md)
* `asManagedUsers` - protect system user accounts managed by appservices (such as bridges) / system (such as bots) from accidental changes.
By defining a list of MXID regex patterns, you can protect these accounts from accidental changes.
Example: `^@baibot:example\\.com$`, `^@slackbot:example\\.com$`, `^@slack_[a-zA-Z0-9\\-]+:example\\.com$`, `^@telegrambot:example\\.com$`, `^@telegram_[a-zA-Z0-9]+:example\\.com$`
[More details](system-users.md)
* `menu` - add custom menu items to the main menu (sidebar) by providing a `menu` array in the config.
Each `menu` item can contain the following fields:
* `label` (required): The text to display in the menu.
* `icon` (optional): The icon to display next to the label, one of the [src/utils/icons.ts](../src/utils/icons.ts) icons, otherwise a default icon will be used.
* `url` (required): The URL to navigate to when the menu item is clicked.
[More details](custom-menu.md)
## Examples
### config.json
```json
{
"restrictBaseUrl": [
"https://matrix.example.com",
"https://synapse.example.net"
],
"asManagedUsers": [
"^@baibot:example\\.com$",
"^@slackbot:example\\.com$",
"^@slack_[a-zA-Z0-9\\-]+:example\\.com$",
"^@telegrambot:example\\.com$",
"^@telegram_[a-zA-Z0-9]+:example\\.com$"
],
"menu": [
{
"label": "Contact support",
"icon": "SupportAgent",
"url": "https://github.com/etkecc/synapse-admin/issues"
}
]
}
```
### `/.well-known/matrix/client`
```json
{
"cc.etke.synapse-admin": {
"restrictBaseUrl": [
"https://matrix.example.com",
"https://synapse.example.net"
],
"asManagedUsers": [
"^@baibot:example\\.com$",
"^@slackbot:example\\.com$",
"^@slack_[a-zA-Z0-9\\-]+:example\\.com$",
"^@telegrambot:example\\.com$",
"^@telegram_[a-zA-Z0-9]+:example\\.com$"
],
"menu": [
{
"label": "Contact support",
"icon": "SupportAgent",
"url": "https://github.com/etkecc/synapse-admin/issues"
}
]
}
}
```

35
docs/cors-credentials.md Normal file
View File

@ -0,0 +1,35 @@
# CORS Credentials
If you'd like to use cookie-based authentication
(for example, [ForwardAuth with Authelia](https://github.com/Awesome-Technologies/synapse-admin/issues/655)),
you can configure the `corsCredentials` option in the `config.json` file or in the `/.well-known/matrix/client` file.
## Configuration
> [Documentation on MDN](https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch#including_credentials)
The `corsCredentials` option accepts the following values:
* `same-origin` (default): Cookies will be sent only if the request is made from the same origin as the server.
* `include`: Cookies will be sent regardless of the origin of the request.
* `omit`: Cookies will not be sent with the request.
[Configuration options](config.md)
### config.json
```json
{
"corsCredentials": "include"
}
```
### `/.well-known/matrix/client`
```json
{
"cc.etke.synapse-admin": {
"corsCredentials": "include"
}
}
```

47
docs/custom-menu.md Normal file
View File

@ -0,0 +1,47 @@
# Custom Menu Items
You can add custom menu items to the main menu (sidebar) by providing a `menu` array in the config.
This is useful for adding links to external sites or other pages in your documentation, like a support page or internal wiki.
## Configuration
The examples below contain the configuration settings to add a link to the [Synapse Admin issues](https://github.com/etke.cc/synapse-admin/issues).
Each `menu` item can contain the following fields:
* `label` (required): The text to display in the menu.
* `icon` (optional): The icon to display next to the label, one of the [src/utils/icons.ts](../src/utils/icons.ts) icons, otherwise a
default icon will be used.
* `url` (required): The URL to navigate to when the menu item is clicked.
[Configuration options](config.md)
### config.json
```json
{
"menu": [
{
"label": "Contact support",
"icon": "SupportAgent",
"url": "https://github.com/etkecc/synapse-admin/issues"
}
]
}
```
### `/.well-known/matrix/client`
```json
{
"cc.etke.synapse-admin": {
"menu": [
{
"label": "Contact support",
"icon": "SupportAgent",
"url": "https://github.com/etkecc/synapse-admin/issues"
}
]
}
}
```

View File

@ -0,0 +1,48 @@
# Prefilling the Login Form
In some cases you may wish to prefill/preset the login form fields when sharing a link to a Synapse Admin instance.
This can be done by adding the following query parameters to the URL:
* `username` - The username to prefill in the username field.
* `server` - The server to prefill in the homeserver url field.
The following query params will work only if the Synapse Admin is loaded from `localhost` or `127.0.0.1`:
* `password` - The password to prefill in the password field (credentials auth). **NEVER** use this in production.
* `accessToken` - The access token to prefill in the access token field (access token auth). **NEVER** use this in production.
> **WARNING**: Never use the `password` or `accessToken` query parameters in production as they can be easily extracted
from the URL. These are only meant for development purposes and local environments.
## Examples
### Production
```bash
https://admin.etke.cc?username=admin&server=https://matrix.example.com
```
This will open `Credentials` (username/password) login form with the username field prefilled with `admin` and the
Homeserver URL field prefilled with `https://matrix.example.com`.
### Development and Local environments
**With Password**
```bash
http://localhost:8080?username=admin&server=https://matrix.example.com&password=secret
```
This will open `Credentials` (username/password) login form with the username field prefilled with `admin`, the
Homeserver URL field prefilled with `https://matrix.example.com` and the password field prefilled with `secret`.
**With Access Token**
```bash
http://localhost:8080?server=https://matrix.example.com&accessToken=secret
```
This will open `Access Token` login form with the Homeserver URL field prefilled with `https://matrix.example.com` and
the access token field prefilled with `secret`.

44
docs/restrict-hs.md Normal file
View File

@ -0,0 +1,44 @@
# Restricting available homeserver
If you want to have your Synapse Admin instance work only with specific homeserver(-s),
you can do that by setting `restrictBaseUrl` in the configuration.
## Configuration
You can do that for a single homeserver or multiple homeservers at once, as `restrictBaseUrl` accepts both a string and
an array of strings.
The examples below contain the configuration settings to restrict the Synapse Admin instance to work only with
`example.com` (with Synapse running at `matrix.example.com`) and
`example.net` (with Synapse running at `synapse.example.net`) homeservers.
Note that the homeserver URL should be the _actual_ homeserver URL, and not the delegated one.
So, if you have a homeserver `example.com` where users have MXIDs like `@user:example.com`,
but actual Synapse is installed on `matrix.example.com` subdomain, you should use `https://matrix.example.com` in the
configuration.
[Configuration options](config.md)
### config.json
```json
{
"restrictBaseUrl": [
"https://matrix.example.com",
"https://synapse.example.net"
]
}
```
### `/.well-known/matrix/client`
```json
{
"cc.etke.synapse-admin": {
"restrictBaseUrl": [
"https://matrix.example.com",
"https://synapse.example.net"
]
}
}
```

53
docs/reverse-proxy.md Normal file
View File

@ -0,0 +1,53 @@
# Serving Synapse Admin behind a reverse proxy
Your are supposed to do so for any service you want to expose to the internet,
and here you can find specific instructions and example configurations for Synapse Admin.
## Nginx
Place the config below into `/etc/nginx/conf.d/synapse-admin.conf` (don't forget to replace `server_name` and `root`):
```nginx
server {
listen 80;
listen [::]:80;
server_name example.com; # REPLACE with your domain
root /var/www/synapse-admin; # REPLACE with path where you extracted synapse admin
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
location ~* \.(?:css|js|jpg|jpeg|gif|png|svg|ico|woff|woff2|ttf|eot|webp)$ {
expires 30d; # Set caching for static assets
add_header Cache-Control "public";
}
gzip on;
gzip_types text/plain application/javascript application/json text/css text/xml application/xml+rss;
gzip_min_length 1000;
}
```
After you've done that, ensure that the configuration is correct by running `nginx -t` and then reload Nginx
(e.g. `systemctl reload nginx`).
> **Note:** This configuration doesn't cover HTTPS, which is highly recommended to use. You can find more information
about setting up HTTPS in the [Nginx documentation](https://nginx.org/en/docs/http/configuring_https_servers.html).
## Traefik (docker labels)
If you are using Traefik as a reverse proxy, you can use the following labels, `docker-compose.yml` example:
```yaml
services:
synapse-admin:
image: ghcr.io/etkecc/synapse-admin:latest
restart: unless-stopped
labels:
- "traefik.enable=true"
- "traefik.http.routers.synapse-admin.rule=Host(`example.com`)"
```
## Other reverse proxies
There is no examples for other reverse proxies yet, and so PRs are greatly appreciated.

44
docs/system-users.md Normal file
View File

@ -0,0 +1,44 @@
# System / Appservice-managed Users
Inadvertently altering system user accounts managed by appservices (such as bridges) / system (such as bots) is a common issue.
Editing, deleting, locking, or changing the passwords of these appservice-managed accounts can cause serious problems.
To prevent this, we've added a new feature that blocks these types of modifications to such accounts,
while still allowing other risk-free changes (changing display names and avatars).
By defining a list of MXID regex patterns in the new `asManagedUsers` configuration setting,
you can protect these accounts from accidental changes.
## Configuration
The examples below contain the configuration settings to mark
[Telegram bridge (mautrix-telegram)](https://github.com/mautrix/telegram),
[Slack bridge (mautrix-slack)](https://github.com/mautrix/slack),
and [Baibot](https://github.com/etkecc/baibot) users of `example.com` homeserver as appservice-managed users,
just to illustrate the options to protect both specific MXIDs (as in the Baibot example) and all puppets of a bridge (as in the Telegram and Slack examples).
[Configuration options](config.md)
### config.json
```json
"asManagedUsers": [
"^@baibot:example\\.com$",
"^@slackbot:example\\.com$",
"^@slack_[a-zA-Z0-9\\-]+:example\\.com$",
"^@telegrambot:example\\.com$",
"^@telegram_[a-zA-Z0-9]+:example\\.com$"
]
```
### `/.well-known/matrix/client`
```json
"cc.etke.synapse-admin": {
"asManagedUsers": [
"^@baibot:example\\.com$",
"^@slackbot:example\\.com$",
"^@slack_[a-zA-Z0-9\\-]+:example\\.com$",
"^@telegrambot:example\\.com$",
"^@telegram_[a-zA-Z0-9]+:example\\.com$"
]
}
```

36
docs/user-badges.md Normal file
View File

@ -0,0 +1,36 @@
# User Badges
To help with identifying users with certain roles or permissions, we have implemented a badge system.
These badges are displayed on the user's avatar and have a handy tooltip that explains what the badge means.
## Available Badges
### 🧙‍ You
This badge is displayed on your user's avatar.
Tooltip for this badge will contain additional information, e.g.: `You (Admin)`.
### 👑 Admin
This badge is displayed on homeserver admins' avatars.
Tooltip for this badge is `Admin`.
### 🛡️ Appservice/System-managed
This badge is displayed on users that are managed by an appservices (or system), [more details](./system-users.md).
Tooltip for this badge will contain additional information, e.g.: `System-managed (Bot)`.
### 🤖 Bot
This badge is displayed on bots' avatars (users with the `user_type` set to `bot`).
Tooltip for this badge is `Bot`.
### 📞 Support
This badge is displayed on users that are part of the support team (users with the `user_type` set to `support`).
Tooltip for this badge is `Support`.
### 👤 Regular User
This badge is displayed on regular users' avatars.
Tooltip for this badge is `Regular User`.

View File

@ -4,17 +4,14 @@
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta
name="description"
content="Synapse-Admin"
/>
<meta name="description" content="Synapse Admin" />
<!--
manifest.json provides metadata used when your web app is installed on a
user's mobile device or desktop. See https://developers.google.com/web/fundamentals/web-app-manifest/
-->
<link rel="manifest" href="./manifest.json" />
<link rel="shortcut icon" href="./favicon.ico" />
<title>Synapse-Admin</title>
<title>Synapse Admin</title>
<style>
body {
margin: 0;
@ -22,6 +19,11 @@
font-family: sans-serif;
}
.layout {
min-height: 90vh !important;
height: 90vh;
}
.loader-container {
display: flex;
align-items: center;
@ -120,13 +122,7 @@
</div>
</div>
<script type="module" src="/src/index.tsx"></script>
<footer
style="position: relative; z-index: 2; height: 2em; margin-top: -2em; line-height: 2em; background-color: #eee; border: 0.5px solid #ddd">
<a id="copyright" href="https://github.com/Awesome-Technologies/synapse-admin"
style="margin-left: 1em; color: #888; font-family: Roboto, Helvetica, Arial, sans-serif; font-weight: 100; font-size: 0.8em; text-decoration: none;">
Synapse-Admin <b><span id="version"></span></b> by Awesome Technologies Innovationslabor GmbH
</a>
</footer>
<span id="js-version" style="display: none;"></span>
</body>
<script>document.getElementById("version").textContent = __SYNAPSE_ADMIN_VERSION__</script>
<script>document.getElementById("js-version").textContent = __SYNAPSE_ADMIN_VERSION__</script>
</html>

View File

@ -2,12 +2,31 @@ import type { JestConfigWithTsJest } from "ts-jest";
const config: JestConfigWithTsJest = {
preset: "ts-jest",
testEnvironment: "jsdom",
testEnvironment: "jest-fixed-jsdom",
collectCoverage: true,
coveragePathIgnorePatterns: ["node_modules", "dist"],
coverageDirectory: "<rootDir>/coverage/",
coverageReporters: ["html", "text", "text-summary", "cobertura"],
extensionsToTreatAsEsm: [".ts", ".tsx"],
setupFilesAfterEnv: ["<rootDir>/src/jest.setup.ts"],
transform: {
"^.+\\.(js|jsx|ts|tsx)$": [
"ts-jest",
{
diagnostics: {
ignoreCodes: [1343],
},
astTransformers: {
before: [
{
path: "ts-jest-mock-import-meta",
options: { metaObjectReplacement: { env: { BASE_URL: "/" } } },
},
],
},
},
],
},
transformIgnorePatterns: [],
};
export default config;

49
justfile Normal file
View File

@ -0,0 +1,49 @@
# Shows help
default:
@just --list --justfile {{ justfile() }}
# build the app
build: __install
@yarn run build --base=./
update:
yarn upgrade-interactive --latest
# run the app in a development mode
run:
@yarn start --host 0.0.0.0
# run dev stack and start the app in a development mode
run-dev:
@echo "Starting the database..."
@docker-compose -f docker-compose-dev.yml up -d postgres
@echo "Starting Synapse..."
@docker-compose -f docker-compose-dev.yml up -d synapse
@echo "Starting Element Web..."
@docker-compose -f docker-compose-dev.yml up -d element
@echo "Ensure admin user is registered..."
@docker-compose -f docker-compose-dev.yml exec synapse register_new_matrix_user --admin -u admin -p admin -c /config/homeserver.yaml http://localhost:8008 || true
@echo "Starting the app..."
@yarn start --host 0.0.0.0
# stop the dev stack
stop-dev:
@docker-compose -f docker-compose-dev.yml stop
# register a user in the dev stack
register-user localpart password *admin:
docker-compose exec synapse register_new_matrix_user {{ if admin == "1" {"--admin"} else {"--no-admin"} }} -u {{ localpart }} -p {{ password }} -c /config/homeserver.yaml http://localhost:8008
# run yarn {fix,lint,test} commands
test:
@-yarn run fix
@-yarn run lint
@-yarn run test
# run the app in a production mode
run-prod: build
@python -m http.server -d dist 1313
# install the project
__install:
@yarn install --immutable --network-timeout=300000

View File

@ -1,81 +1,100 @@
{
"name": "synapse-admin",
"version": "0.10.3",
"description": "Admin GUI for the Matrix.org server Synapse",
"version": "0.11.1",
"description": "Feature-packed and visually customizable admin GUI for Matrix Synapse servers.",
"keywords": [
"matrix",
"synapse",
"admin",
"homeserver",
"management",
"react",
"nodejs",
"dashboard",
"etkecc",
"docker"
],
"type": "module",
"author": "Awesome Technologies Innovationslabor GmbH",
"author": "etke.cc (originally by Awesome Technologies Innovationslabor GmbH)",
"license": "Apache-2.0",
"homepage": ".",
"homepage": "https://github.com/etkecc/synapse-admin#readme",
"repository": {
"type": "git",
"url": "https://github.com/Awesome-Technologies/synapse-admin"
"url": "git+https://github.com/etkecc/synapse-admin.git"
},
"bugs": {
"url": "https://github.com/etkecc/synapse-admin/issues"
},
"funding": {
"type": "individual",
"url": "https://liberapay.com/etkecc"
},
"packageManager": "yarn@4.4.1",
"devDependencies": {
"@eslint/js": "^9.7.0",
"@mui/utils": "^6.1.3",
"@testing-library/dom": "^10.4.0",
"@testing-library/jest-dom": "^6.0.0",
"@testing-library/react": "^16.0.0",
"@testing-library/user-event": "^14.5.2",
"@types/jest": "^29.5.12",
"@types/lodash": "^4.17.7",
"@types/node": "^20.14.12",
"@types/papaparse": "^5.3.14",
"@types/react": "^18.3.3",
"@typescript-eslint/eslint-plugin": "^7.16.1",
"@typescript-eslint/parser": "^7.16.1",
"@vitejs/plugin-react": "^4.0.0",
"eslint": "^8.57.0",
"eslint-config-prettier": "^9.1.0",
"eslint-plugin-import": "^2.29.1",
"eslint-plugin-jsx-a11y": "^6.9.0",
"eslint-plugin-prettier": "^5.2.1",
"@eslint/js": "^9.32.0",
"@testing-library/dom": "^10.4.1",
"@testing-library/jest-dom": "^6.6.4",
"@testing-library/react": "^16.3.0",
"@testing-library/user-event": "^14.6.1",
"@types/jest": "^30.0.0",
"@types/lodash": "^4.17.20",
"@types/node": "^24.2.1",
"@types/papaparse": "^5.3.16",
"@types/react": "^19.1.10",
"@typescript-eslint/eslint-plugin": "^8.32.0",
"@typescript-eslint/parser": "^8.37.0",
"@vitejs/plugin-react": "^5.0.0",
"eslint": "^9.33.0",
"eslint-config-prettier": "^10.1.8",
"eslint-plugin-import": "^2.32.0",
"eslint-plugin-jsx-a11y": "^6.10.2",
"eslint-plugin-prettier": "^5.5.4",
"eslint-plugin-unused-imports": "^4.1.4",
"eslint-plugin-yaml": "^1.0.3",
"jest": "^29.7.0",
"jest-environment-jsdom": "^29.7.0",
"jest": "^30.0.5",
"jest-environment-jsdom": "^30.0.5",
"jest-fetch-mock": "^3.0.3",
"prettier": "^3.3.3",
"react-test-renderer": "^18.3.1",
"ts-jest": "^29.2.3",
"prettier": "^3.6.2",
"react-test-renderer": "^19.1.1",
"ts-jest": "^29.4.1",
"ts-node": "^10.9.2",
"typescript": "^5.4.5",
"typescript-eslint": "^8.32.1",
"vite": "^6.3.5",
"vite-plugin-version-mark": "^0.1.0"
"typescript": "^5.8.3",
"typescript-eslint": "^8.39.1",
"vite": "^7.1.2",
"vite-plugin-version-mark": "^0.1.4"
},
"dependencies": {
"@emotion/react": "^11.13.0",
"@emotion/styled": "^11.13.0",
"@bicstone/ra-language-japanese": "^5.10.0",
"@emotion/react": "^11.14.0",
"@emotion/styled": "^11.14.1",
"@haleos/ra-language-german": "^1.0.0",
"@haxqer/ra-language-chinese": "^4.16.2",
"@mui/icons-material": "^5.16.4",
"@mui/material": "^5.16.4",
"@tanstack/react-query": "^5.59.12",
"@mui/icons-material": "^7.3.1",
"@mui/material": "^7.3.1",
"@mui/utils": "^7.1.0",
"@tanstack/react-query": "^5.84.2",
"history": "^5.3.0",
"jest-fixed-jsdom": "^0.0.9",
"lodash": "^4.17.21",
"papaparse": "^5.4.1",
"query-string": "^7.1.3",
"ra-core": "^5.2.3",
"ra-i18n-polyglot": "^5.2.3",
"ra-language-english": "^5.8.2",
"ra-language-farsi": "^5.0.0",
"ra-language-french": "^5.2.3",
"papaparse": "^5.5.3",
"ra-core": "^5.4.4",
"ra-i18n-polyglot": "^5.4.4",
"ra-language-english": "^5.4.4",
"ra-language-farsi": "^5.1.0",
"ra-language-french": "^5.10.1",
"ra-language-italian": "^3.13.1",
"ra-language-russian": "^4.14.2",
"react": "^18.3.1",
"react-admin": "^5.2.3",
"react-dom": "^18.3.1",
"react-hook-form": "^7.52.1",
"react-is": "^18.3.1",
"react-router": "^6.28.1",
"react-router-dom": "^6.28.1"
"ra-language-russian": "^5.4.4",
"react": "^19.1.1",
"react-admin": "^5.10.1",
"react-dom": "^19.1.1",
"react-hook-form": "^7.62.0",
"react-is": "^19.1.1",
"react-router": "^7.6.0",
"react-router-dom": "^7.8.0",
"ts-jest-mock-import-meta": "^1.3.1"
},
"scripts": {
"start": "vite serve",
"build": "vite build",
"lint": "eslint --ignore-path .gitignore --ext .ts,.tsx,.yml,.yaml .",
"lint": "ESLINT_USE_FLAT_CONFIG=false eslint --ignore-path .gitignore --ignore-pattern testdata/ --ext .ts,.tsx .",
"fix": "yarn lint --fix",
"test": "yarn jest",
"test:watch": "yarn jest --watch"
@ -88,15 +107,13 @@
"import",
"prettier",
"unused-imports",
"@typescript-eslint",
"yaml"
"@typescript-eslint"
],
"extends": [
"eslint:recommended",
"plugin:@typescript-eslint/recommended",
"plugin:@typescript-eslint/stylistic",
"plugin:import/typescript",
"plugin:yaml/legacy"
"plugin:import/typescript"
],
"parser": "@typescript-eslint/parser",
"parserOptions": {
@ -105,6 +122,18 @@
"root": true,
"rules": {
"prettier/prettier": "error",
"@typescript-eslint/no-unused-vars": [
"error",
{
"args": "all",
"argsIgnorePattern": "^_",
"caughtErrors": "all",
"caughtErrorsIgnorePattern": "^_",
"destructuredArrayIgnorePattern": "^_",
"varsIgnorePattern": "^_",
"ignoreRestSiblings": true
}
],
"import/no-extraneous-dependencies": [
"error",
{
@ -135,8 +164,7 @@
]
]
}
],
"unused-imports/no-unused-imports-ts": 2
]
}
},
"prettier": {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 4.2 KiB

BIN
public/images/logo.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

View File

@ -1,15 +0,0 @@
{
"short_name": "Synapse-Admin",
"name": "Synapse-Admin",
"icons": [
{
"src": "favicon.ico",
"sizes": "64x64 32x32 24x24 16x16",
"type": "image/x-icon"
}
],
"start_url": ".",
"display": "standalone",
"theme_color": "#000000",
"background_color": "#ffffff"
}

BIN
screenshots/auth.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 83 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 72 KiB

View File

Before

Width:  |  Height:  |  Size: 222 KiB

After

Width:  |  Height:  |  Size: 222 KiB

View File

@ -1,12 +1,32 @@
import { render, screen } from "@testing-library/react";
import fetchMock from "jest-fetch-mock";
import { BrowserRouter } from "react-router-dom";
fetchMock.enableMocks();
jest.mock("./synapse/authProvider", () => ({
__esModule: true,
default: {
logout: jest.fn().mockResolvedValue(undefined),
},
}));
import App from "./App";
describe("App", () => {
beforeEach(() => {
// Reset all mocks before each test
fetchMock.resetMocks();
// Mock any fetch call to return empty JSON immediately
fetchMock.mockResponseOnce(JSON.stringify({}));
});
it("renders", async () => {
render(<App />);
await screen.findAllByText("Welcome to Synapse-admin");
render(
<BrowserRouter>
<App />
</BrowserRouter>
);
await screen.findAllByText("Welcome to Synapse Admin");
});
});

View File

@ -1,14 +1,23 @@
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { merge } from "lodash";
import polyglotI18nProvider from "ra-i18n-polyglot";
import { Admin, CustomRoutes, Resource, resolveBrowserLocale } from "react-admin";
import { Route } from "react-router-dom";
import { ImportFeature } from "./components/ImportFeature";
import AdminLayout from "./components/AdminLayout";
import BillingPage from "./components/etke.cc/BillingPage";
import ServerActionsPage from "./components/etke.cc/ServerActionsPage";
import ServerNotificationsPage from "./components/etke.cc/ServerNotificationsPage";
import ServerStatusPage from "./components/etke.cc/ServerStatusPage";
import RecurringCommandEdit from "./components/etke.cc/schedules/components/recurring/RecurringCommandEdit";
import ScheduledCommandEdit from "./components/etke.cc/schedules/components/scheduled/ScheduledCommandEdit";
import ScheduledCommandShow from "./components/etke.cc/schedules/components/scheduled/ScheduledCommandShow";
import UserImport from "./components/user-import/UserImport";
import germanMessages from "./i18n/de";
import englishMessages from "./i18n/en";
import frenchMessages from "./i18n/fr";
import italianMessages from "./i18n/it";
import japaneseMessages from "./i18n/ja";
import russianMessages from "./i18n/ru";
import chineseMessages from "./i18n/zh";
import LoginPage from "./pages/LoginPage";
@ -28,6 +37,7 @@ const messages = {
en: englishMessages,
fr: frenchMessages,
it: italianMessages,
ja: japaneseMessages,
ru: russianMessages,
zh: chineseMessages,
};
@ -39,42 +49,58 @@ const i18nProvider = polyglotI18nProvider(
{ locale: "de", name: "Deutsch" },
{ locale: "fr", name: "Français" },
{ locale: "it", name: "Italiano" },
{ locale: "fa", name: "Persian(فارسی)" },
{ locale: "ru", name: "Russian(Русский)" },
{ locale: "zh", name: "简体中文" },
{ locale: "ja", name: "Japanese (日本語)" },
{ locale: "fa", name: "Persian (فارسی)" },
{ locale: "ru", name: "Russian (Русский)" },
{ locale: "zh", name: "Chinese (简体中文)" },
]
);
const App = () => (
<Admin
disableTelemetry
requireAuth
loginPage={LoginPage}
authProvider={authProvider}
dataProvider={dataProvider}
i18nProvider={i18nProvider}
>
<CustomRoutes>
<Route path="/import_users" element={<ImportFeature />} />
</CustomRoutes>
<Resource {...users} />
<Resource {...rooms} />
<Resource {...userMediaStats} />
<Resource {...reports} />
<Resource {...roomDirectory} />
<Resource {...destinations} />
<Resource {...registrationToken} />
<Resource name="connections" />
<Resource name="devices" />
<Resource name="room_members" />
<Resource name="users_media" />
<Resource name="joined_rooms" />
<Resource name="pushers" />
<Resource name="servernotices" />
<Resource name="forward_extremities" />
<Resource name="room_state" />
<Resource name="destination_rooms" />
</Admin>
const queryClient = new QueryClient();
export const App = () => (
<QueryClientProvider client={queryClient}>
<Admin
disableTelemetry
requireAuth
title="Synapse Admin"
layout={AdminLayout}
loginPage={LoginPage}
authProvider={authProvider}
dataProvider={dataProvider}
i18nProvider={i18nProvider}
>
<CustomRoutes>
<Route path="/import_users" element={<UserImport />} />
<Route path="/server_status" element={<ServerStatusPage />} />
<Route path="/server_actions" element={<ServerActionsPage />} />
<Route path="/server_actions/scheduled/:id/show" element={<ScheduledCommandShow />} />
<Route path="/server_actions/scheduled/:id" element={<ScheduledCommandEdit />} />
<Route path="/server_actions/scheduled/create" element={<ScheduledCommandEdit />} />
<Route path="/server_actions/recurring/:id" element={<RecurringCommandEdit />} />
<Route path="/server_actions/recurring/create" element={<RecurringCommandEdit />} />
<Route path="/server_notifications" element={<ServerNotificationsPage />} />
<Route path="/billing" element={<BillingPage />} />
</CustomRoutes>
<Resource {...users} />
<Resource {...rooms} />
<Resource {...userMediaStats} />
<Resource {...reports} />
<Resource {...roomDirectory} />
<Resource {...destinations} />
<Resource {...registrationToken} />
<Resource name="connections" />
<Resource name="devices" />
<Resource name="room_members" />
<Resource name="users_media" />
<Resource name="joined_rooms" />
<Resource name="pushers" />
<Resource name="servernotices" />
<Resource name="forward_extremities" />
<Resource name="room_state" />
<Resource name="destination_rooms" />
</Admin>
</QueryClientProvider>
);
export default App;

View File

@ -1,9 +0,0 @@
import { createContext, useContext } from "react";
interface AppContextType {
restrictBaseUrl: string | string[];
}
export const AppContext = createContext({});
export const useAppContext = () => useContext(AppContext) as AppContextType;

7
src/Context.tsx Normal file
View File

@ -0,0 +1,7 @@
import { createContext, useContext } from "react";
import { Config } from "./utils/config";
export const AppContext = createContext<Config>({} as Config);
export const useAppContext = () => useContext(AppContext) as Config;

View File

@ -0,0 +1,179 @@
import ManageHistoryIcon from "@mui/icons-material/ManageHistory";
import PaymentIcon from "@mui/icons-material/Payment";
import { useEffect, useState, Suspense } from "react";
import {
CheckForApplicationUpdate,
AppBar,
TitlePortal,
InspectorButton,
Confirm,
Layout,
Logout,
Menu,
useLogout,
UserMenu,
useStore,
useLocaleState,
} from "react-admin";
import Footer from "./Footer";
import { LoginMethod } from "../pages/LoginPage";
import { MenuItem, GetConfig, ClearConfig } from "../utils/config";
import { Icons, DefaultIcon } from "../utils/icons";
import { ServerNotificationsBadge } from "./etke.cc/ServerNotificationsBadge";
import { ServerProcessResponse, ServerStatusResponse } from "../synapse/dataProvider";
import ServerStatusBadge from "./etke.cc/ServerStatusBadge";
import { ServerStatusStyledBadge } from "./etke.cc/ServerStatusBadge";
const AdminUserMenu = () => {
const [open, setOpen] = useState(false);
const logout = useLogout();
const checkLoginType = (ev: React.MouseEvent<HTMLDivElement>) => {
const loginType: LoginMethod = (localStorage.getItem("login_type") || "credentials") as LoginMethod;
if (loginType === "accessToken") {
ev.stopPropagation();
setOpen(true);
}
};
const handleConfirm = () => {
setOpen(false);
logout();
};
const handleDialogClose = () => {
setOpen(false);
ClearConfig();
window.location.reload();
};
return (
<UserMenu>
<div onClickCapture={checkLoginType}>
<Logout />
</div>
<Confirm
isOpen={open}
title="synapseadmin.auth.logout_acces_token_dialog.title"
content="synapseadmin.auth.logout_acces_token_dialog.content"
onConfirm={handleConfirm}
onClose={handleDialogClose}
confirm="synapseadmin.auth.logout_acces_token_dialog.confirm"
cancel="synapseadmin.auth.logout_acces_token_dialog.cancel"
/>
</UserMenu>
);
};
const AdminAppBar = () => {
return (
<AppBar userMenu={<AdminUserMenu />}>
<TitlePortal />
<ServerStatusBadge />
<ServerNotificationsBadge />
<InspectorButton />
</AppBar>
);
};
const AdminMenu = props => {
const [menu, setMenu] = useState([] as MenuItem[]);
const [etkeRoutesEnabled, setEtkeRoutesEnabled] = useState(false);
useEffect(() => {
setMenu(GetConfig().menu);
if (GetConfig().etkeccAdmin) {
setEtkeRoutesEnabled(true);
}
}, []);
const [serverProcess, _setServerProcess] = useStore<ServerProcessResponse>("serverProcess", {
command: "",
locked_at: "",
});
const [serverStatus, _setServerStatus] = useStore<ServerStatusResponse>("serverStatus", {
success: false,
ok: false,
host: "",
results: [],
});
return (
<Menu {...props}>
{etkeRoutesEnabled && (
<Menu.Item
key="server_status"
to="/server_status"
leftIcon={
<ServerStatusStyledBadge
inSidebar={true}
command={serverProcess.command}
locked_at={serverProcess.locked_at}
isOkay={serverStatus.ok}
isLoaded={serverStatus.success}
/>
}
primaryText="Server Status"
/>
)}
{etkeRoutesEnabled && (
<Menu.Item
key="server_actions"
to="/server_actions"
leftIcon={<ManageHistoryIcon />}
primaryText="Server Actions"
/>
)}
{etkeRoutesEnabled && <Menu.Item key="billing" to="/billing" leftIcon={<PaymentIcon />} primaryText="Billing" />}
<Menu.ResourceItems />
{menu &&
menu.map((item, index) => {
const { url, icon, label } = item;
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
const IconComponent = Icons[icon] as React.ComponentType<any> | undefined;
return (
<Suspense key={index}>
<Menu.Item
to={url}
target="_blank"
primaryText={label}
leftIcon={IconComponent ? <IconComponent /> : <DefaultIcon />}
onClick={props.onMenuClick}
/>
</Suspense>
);
})}
</Menu>
);
};
export const AdminLayout = ({ children }) => {
// Set the document language based on the selected locale
const [locale, _setLocale] = useLocaleState();
useEffect(() => {
document.documentElement.lang = locale;
}, [locale]);
return (
<>
<Layout
appBar={AdminAppBar}
menu={AdminMenu}
sx={{
["& .RaLayout-appFrame"]: {
minHeight: "90vh",
height: "90vh",
},
["& .RaLayout-content"]: {
marginBottom: "3rem",
},
}}
>
{children}
<CheckForApplicationUpdate />
</Layout>
<Footer />
</>
);
};
export default AdminLayout;

View File

@ -1,18 +1,44 @@
import { render, screen } from "@testing-library/react";
import { render, screen, waitFor } from "@testing-library/react";
import { act } from "react";
import { RecordContextProvider } from "react-admin";
import AvatarField from "./AvatarField";
describe("AvatarField", () => {
it("shows image", () => {
beforeEach(() => {
// Mock fetch
global.fetch = jest.fn(() =>
Promise.resolve({
blob: () => Promise.resolve(new Blob(["mock image data"], { type: "image/jpeg" })),
})
) as jest.Mock;
// Mock URL.createObjectURL
global.URL.createObjectURL = jest.fn(() => "mock-object-url");
});
afterEach(() => {
jest.restoreAllMocks();
});
it.only("shows image", async () => {
const value = {
avatar: "foo",
avatar: "mxc://serverName/mediaId",
};
render(
<RecordContextProvider value={value}>
<AvatarField source="avatar" />
</RecordContextProvider>
);
expect(screen.getByRole("img").getAttribute("src")).toBe("foo");
await act(async () => {
render(
<RecordContextProvider value={value}>
<AvatarField source="avatar" />
</RecordContextProvider>
);
});
await waitFor(() => {
const img = screen.getByRole("img");
expect(img.getAttribute("src")).toBe("mock-object-url");
});
expect(global.fetch).toHaveBeenCalled();
});
});

View File

@ -1,13 +1,111 @@
import { Avatar, AvatarProps, Badge, Tooltip } from "@mui/material";
import { get } from "lodash";
import { useState, useEffect, useCallback } from "react";
import { FieldProps, useRecordContext, useTranslate } from "react-admin";
import { Avatar } from "@mui/material";
import { useRecordContext } from "react-admin";
import { fetchAuthenticatedMedia } from "../utils/fetchMedia";
import { isMXID, isASManaged } from "../utils/mxid";
const AvatarField = ({ source, ...rest }) => {
const record = useRecordContext(rest);
const src = get(record, source)?.toString();
const AvatarField = ({ source, ...rest }: AvatarProps & FieldProps) => {
const { alt, classes, sizes, sx, variant } = rest;
return <Avatar alt={alt} classes={classes} sizes={sizes} src={src} sx={sx} variant={variant} />;
const record = useRecordContext(rest);
const mxcURL = get(record, source)?.toString();
const [src, setSrc] = useState<string>("");
const fetchAvatar = useCallback(async (mxcURL: string) => {
const response = await fetchAuthenticatedMedia(mxcURL, "thumbnail");
const blob = await response.blob();
const blobURL = URL.createObjectURL(blob);
setSrc(blobURL);
}, []);
useEffect(() => {
if (mxcURL) {
fetchAvatar(mxcURL);
}
// Cleanup function to revoke the object URL
return () => {
if (src) {
URL.revokeObjectURL(src);
}
};
}, [mxcURL, fetchAvatar]);
// a hacky way to handle both users and rooms,
// where users have an ID, may have a name, and may have a displayname
// and rooms have an ID and may have a name
let letter = "";
if (record?.id) {
letter = record.id[0].toUpperCase();
}
if (record?.name) {
letter = record.name[0].toUpperCase();
}
if (record?.displayname) {
letter = record.displayname[0].toUpperCase();
}
// hacky way to determine the user type
let badge = "";
let tooltip = "";
if (isMXID(record?.id)) {
const translate = useTranslate();
switch (record?.user_type) {
case "bot":
badge = "🤖";
tooltip = translate("resources.users.badge.bot");
break;
case "support":
badge = "📞";
tooltip = translate("resources.users.badge.support");
break;
default:
badge = "👤";
tooltip = translate("resources.users.badge.regular");
break;
}
if (record?.admin) {
badge = "👑";
tooltip = translate("resources.users.badge.admin");
}
if (isASManaged(record?.name)) {
badge = "🛡️";
tooltip = `${translate("resources.users.badge.system_managed")} (${tooltip})`;
}
if (localStorage.getItem("user_id") === record?.id) {
badge = "🧙‍";
tooltip = `${translate("resources.users.badge.you")} (${tooltip})`;
}
}
// if there is a badge, wrap the Avatar in a Badge and a Tooltip
if (badge) {
return (
<Tooltip title={tooltip}>
<Badge
badgeContent={badge}
overlap="circular"
sx={{ "& .MuiBadge-badge": { width: "10px" } }} // we deliberately set a very small width here, to make the badge actually circular
anchorOrigin={{
vertical: "bottom",
horizontal: "right",
}}
>
<Avatar alt={alt} classes={classes} sizes={sizes} src={src} sx={sx} variant={variant}>
{letter}
</Avatar>
</Badge>
</Tooltip>
);
}
return (
<Avatar alt={alt} classes={classes} sizes={sizes} src={src} sx={sx} variant={variant}>
{letter}
</Avatar>
);
};
export default AvatarField;

View File

@ -0,0 +1,113 @@
import ActionCheck from "@mui/icons-material/CheckCircle";
import ActionDelete from "@mui/icons-material/Delete";
import AlertError from "@mui/icons-material/ErrorOutline";
import { Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle } from "@mui/material";
import { Fragment, useState } from "react";
import {
SimpleForm,
BooleanInput,
useTranslate,
useNotify,
useRedirect,
NotificationType,
useDeleteMany,
Identifier,
useUnselectAll,
} from "react-admin";
interface DeleteRoomButtonProps {
selectedIds: Identifier[];
confirmTitle: string;
confirmContent: string;
}
const resourceName = "rooms";
const DeleteRoomButton: React.FC<DeleteRoomButtonProps> = props => {
const translate = useTranslate();
const [open, setOpen] = useState(false);
const [block, setBlock] = useState(false);
const notify = useNotify();
const redirect = useRedirect();
const [deleteMany, { isLoading }] = useDeleteMany();
const unselectAll = useUnselectAll(resourceName);
const recordIds = props.selectedIds;
const handleDialogOpen = () => setOpen(true);
const handleDialogClose = () => setOpen(false);
const handleDelete = (values: { block: boolean }) => {
deleteMany(
resourceName,
{ ids: recordIds, meta: values },
{
onSuccess: () => {
notify("resources.rooms.action.erase.success");
handleDialogClose();
unselectAll();
redirect("/rooms");
},
onError: _error => notify("resources.rooms.action.erase.failure", { type: "error" as NotificationType }),
}
);
};
const handleConfirm = () => {
setOpen(false);
handleDelete({ block: block });
};
return (
<Fragment>
<Button
onClick={handleDialogOpen}
disabled={isLoading}
className={"ra-delete-button"}
key="button"
size="small"
sx={{
"&.MuiButton-sizeSmall": {
lineHeight: 1.5,
},
}}
color={"error"}
startIcon={<ActionDelete />}
>
{translate("ra.action.delete")}
</Button>
<Dialog open={open} onClose={handleDialogClose}>
<DialogTitle>{translate(props.confirmTitle)}</DialogTitle>
<DialogContent>
<DialogContentText>{translate(props.confirmContent)}</DialogContentText>
<SimpleForm toolbar={false}>
<BooleanInput
source="block"
value={block}
onChange={(event: React.ChangeEvent<HTMLInputElement>) => setBlock(event.target.checked)}
label="resources.rooms.action.erase.fields.block"
defaultValue={false}
/>
</SimpleForm>
</DialogContent>
<DialogActions>
<Button disabled={false} onClick={handleDialogClose} startIcon={<AlertError />}>
{translate("ra.action.cancel")}
</Button>
<Button
disabled={false}
onClick={handleConfirm}
className={"ra-confirm RaConfirm-confirmPrimary"}
autoFocus
startIcon={<ActionCheck />}
>
{translate("ra.action.confirm")}
</Button>
</DialogActions>
</Dialog>
</Fragment>
);
};
export default DeleteRoomButton;

View File

@ -0,0 +1,126 @@
import ActionCheck from "@mui/icons-material/CheckCircle";
import ActionDelete from "@mui/icons-material/Delete";
import AlertError from "@mui/icons-material/ErrorOutline";
import { Button, Dialog, DialogActions, DialogContent, DialogContentText, DialogTitle } from "@mui/material";
import { Fragment, useState } from "react";
import {
SimpleForm,
BooleanInput,
useTranslate,
useNotify,
useRedirect,
NotificationType,
useDeleteMany,
Identifier,
useUnselectAll,
} from "react-admin";
interface DeleteUserButtonProps {
selectedIds: Identifier[];
confirmTitle: string;
confirmContent: string;
}
const resourceName = "users";
const DeleteUserButton: React.FC<DeleteUserButtonProps> = props => {
const translate = useTranslate();
const [open, setOpen] = useState(false);
const [deleteMedia, setDeleteMedia] = useState(false);
const [redactEvents, setRedactEvents] = useState(false);
const notify = useNotify();
const redirect = useRedirect();
const [deleteMany, { isLoading }] = useDeleteMany();
const unselectAll = useUnselectAll(resourceName);
const recordIds = props.selectedIds;
const handleDialogOpen = () => setOpen(true);
const handleDialogClose = () => setOpen(false);
const handleDelete = (values: { deleteMedia: boolean; redactEvents: boolean }) => {
deleteMany(
resourceName,
{ ids: recordIds, meta: values },
{
onSuccess: () => {
notify("ra.notification.deleted", {
messageArgs: {
smart_count: recordIds.length,
},
type: "info" as NotificationType,
});
handleDialogClose();
unselectAll();
redirect("/users");
},
onError: _error => notify("ra.notification.data_provider_error", { type: "error" as NotificationType }),
}
);
};
const handleConfirm = () => {
setOpen(false);
handleDelete({ deleteMedia: deleteMedia, redactEvents: redactEvents });
};
return (
<Fragment>
<Button
onClick={handleDialogOpen}
disabled={isLoading}
className={"ra-delete-button"}
key="button"
size="small"
sx={{
"&.MuiButton-sizeSmall": {
lineHeight: 1.5,
},
}}
color={"error"}
startIcon={<ActionDelete />}
>
{translate("ra.action.delete")}
</Button>
<Dialog open={open} onClose={handleDialogClose}>
<DialogTitle>{translate(props.confirmTitle)}</DialogTitle>
<DialogContent>
<DialogContentText>{translate(props.confirmContent)}</DialogContentText>
<SimpleForm toolbar={false}>
<BooleanInput
source="deleteMedia"
value={deleteMedia}
onChange={(event: React.ChangeEvent<HTMLInputElement>) => setDeleteMedia(event.target.checked)}
label="resources.users.action.delete_media"
defaultValue={false}
/>
<BooleanInput
source="redactEvents"
value={redactEvents}
onChange={(event: React.ChangeEvent<HTMLInputElement>) => setRedactEvents(event.target.checked)}
label="resources.users.action.redact_events"
defaultValue={false}
/>
</SimpleForm>
</DialogContent>
<DialogActions>
<Button disabled={false} onClick={handleDialogClose} startIcon={<AlertError />}>
{translate("ra.action.cancel")}
</Button>
<Button
disabled={false}
onClick={handleConfirm}
className={"ra-confirm RaConfirm-confirmPrimary"}
autoFocus
startIcon={<ActionCheck />}
>
{translate("ra.action.confirm")}
</Button>
</DialogActions>
</Dialog>
</Fragment>
);
};
export default DeleteUserButton;

View File

@ -1,9 +1,16 @@
import { DeleteWithConfirmButton, DeleteWithConfirmButtonProps, useRecordContext } from "react-admin";
import { isASManaged } from "../utils/mxid";
export const DeviceRemoveButton = (props: DeleteWithConfirmButtonProps) => {
const record = useRecordContext();
if (!record) return null;
let isASManagedUser = false;
if (record.user_id) {
isASManagedUser = isASManaged(record.user_id);
}
return (
<DeleteWithConfirmButton
{...props}
@ -12,6 +19,7 @@ export const DeviceRemoveButton = (props: DeleteWithConfirmButtonProps) => {
confirmContent="resources.devices.action.erase.content"
mutationMode="pessimistic"
redirect={false}
disabled={isASManagedUser}
translateOptions={{
id: record.id,
name: record.display_name ? record.display_name : record.id,
@ -19,3 +27,5 @@ export const DeviceRemoveButton = (props: DeleteWithConfirmButtonProps) => {
/>
);
};
export default DeviceRemoveButton;

View File

@ -0,0 +1,100 @@
import { Stack, Switch, Typography } from "@mui/material";
import { useState, useEffect } from "react";
import { useRecordContext } from "react-admin";
import { useNotify } from "react-admin";
import { useDataProvider } from "react-admin";
import { ExperimentalFeaturesModel, SynapseDataProvider } from "../synapse/dataProvider";
const experimentalFeaturesMap = {
msc3881: "enable remotely toggling push notifications for another client",
msc3575: "enable experimental sliding sync support",
};
const ExperimentalFeatureRow = (props: {
featureKey: string;
featureValue: boolean;
updateFeature: (feature_name: string, feature_value: boolean) => void;
}) => {
const featureKey = props.featureKey;
const featureValue = props.featureValue;
const featureDescription = experimentalFeaturesMap[featureKey] ?? "";
const [checked, setChecked] = useState(featureValue);
const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
setChecked(event.target.checked);
props.updateFeature(featureKey, event.target.checked);
};
return (
<Stack
direction="row"
spacing={2}
alignItems="start"
sx={{
padding: 2,
}}
>
<Switch checked={checked} onChange={handleChange} />
<Stack>
<Typography
variant="subtitle1"
sx={{
fontWeight: "medium",
color: "text.primary",
}}
>
{featureKey}
</Typography>
<Typography variant="body2" color="text.secondary">
{featureDescription}
</Typography>
</Stack>
</Stack>
);
};
export const ExperimentalFeaturesList = () => {
const record = useRecordContext();
const notify = useNotify();
const dataProvider = useDataProvider() as SynapseDataProvider;
const [features, setFeatures] = useState({});
if (!record) {
return null;
}
useEffect(() => {
const fetchFeatures = async () => {
const features = await dataProvider.getFeatures(record.id);
setFeatures(features);
};
fetchFeatures();
}, []);
const updateFeature = async (feature_name: string, feature_value: boolean) => {
const updatedFeatures = { ...features, [feature_name]: feature_value } as ExperimentalFeaturesModel;
setFeatures(updatedFeatures);
await dataProvider.updateFeatures(record.id, updatedFeatures);
notify("ra.notification.updated", {
messageArgs: { smart_count: 1 },
type: "success",
});
};
return (
<>
<Stack direction="column" spacing={1}>
{Object.keys(features).map((featureKey: string) => (
<ExperimentalFeatureRow
key={featureKey}
featureKey={featureKey}
featureValue={features[featureKey]}
updateFeature={updateFeature}
/>
))}
</Stack>
</>
);
};
export default ExperimentalFeaturesList;

59
src/components/Footer.tsx Normal file
View File

@ -0,0 +1,59 @@
import { Avatar, Box, Link } from "@mui/material";
import { useTheme } from "@mui/material/styles";
import { useEffect, useState } from "react";
const Footer = () => {
const [version, setVersion] = useState<string | null>(null);
const theme = useTheme();
useEffect(() => {
const version = document.getElementById("js-version")?.textContent;
if (version) {
setVersion(version);
}
}, []);
return (
<Box
component="footer"
sx={{
position: "fixed",
zIndex: 100,
bottom: 0,
width: "100%",
bgcolor: theme.palette.background.default,
color: theme.palette.text.primary,
borderTop: "1px solid",
borderColor: theme.palette.divider,
fontSize: "0.89rem",
display: "flex",
flexDirection: "row",
alignItems: "center",
justifyContent: "start",
p: 1,
gap: "10px",
}}
>
<Avatar
src="./images/logo.webp"
sx={{ width: "1rem", height: "1rem", display: "inline-block", verticalAlign: "sub" }}
/>
<Link href="https://github.com/etkecc/synapse-admin" target="_blank">
Synapse Admin {version}
</Link>
by
<Link
href="https://etke.cc/?utm_source=synapse-admin&utm_medium=footer&utm_campaign=synapse-admin"
target="_blank"
>
etke.cc
</Link>
(originally developed by Awesome Technologies Innovationslabor GmbH).
<Link sx={{ fontWeight: "bold" }} href="https://matrix.to/#/#synapse-admin:etke.cc" target="_blank">
#synapse-admin:etke.cc
</Link>
</Box>
);
};
export default Footer;

View File

@ -1,559 +0,0 @@
import { parse as parseCsv, unparse as unparseCsv, ParseResult } from "papaparse";
import { ChangeEvent, useState } from "react";
import {
Button,
Card,
CardActions,
CardContent,
CardHeader,
Checkbox,
Container,
FormControlLabel,
NativeSelect,
} from "@mui/material";
import { DataProvider, useTranslate } from "ra-core";
import { useDataProvider, useNotify, RaRecord, Title } from "react-admin";
import { generateRandomMxId, generateRandomPassword } from "../synapse/synapse";
const LOGGING = true;
const expectedFields = ["id", "displayname"].sort();
function TranslatableOption({ value, text }) {
const translate = useTranslate();
return <option value={value}>{translate(text)}</option>;
}
type Progress = {
done: number;
limit: number;
} | null;
interface ImportLine {
id: string;
displayname: string;
user_type?: string;
name?: string;
deactivated?: boolean;
guest?: boolean;
admin?: boolean;
is_admin?: boolean;
password?: string;
avatar_url?: string;
}
interface ChangeStats {
total: number;
id: number;
is_guest: number;
admin: number;
password: number;
}
interface ImportResult {
skippedRecords: RaRecord[];
erroredRecords: RaRecord[];
succeededRecords: RaRecord[];
totalRecordCount: number;
changeStats: ChangeStats;
wasDryRun: boolean;
}
const FilePicker = () => {
const [values, setValues] = useState<ImportLine[]>([]);
const [error, setError] = useState<string | string[] | null>(null);
const [stats, setStats] = useState<ChangeStats | null>(null);
const [dryRun, setDryRun] = useState(true);
const [progress, setProgress] = useState<Progress>(null);
const [importResults, setImportResults] = useState<ImportResult | null>(null);
const [skippedRecords, setSkippedRecords] = useState<string>("");
const [conflictMode, setConflictMode] = useState("stop");
const [passwordMode, setPasswordMode] = useState(true);
const [useridMode, setUseridMode] = useState("ignore");
const translate = useTranslate();
const notify = useNotify();
const dataProvider = useDataProvider();
const onFileChange = async (e: ChangeEvent<HTMLInputElement>) => {
if (progress !== null) return;
setValues([]);
setError(null);
setStats(null);
setImportResults(null);
const file = e.target.files ? e.target.files[0] : null;
if (!file) return;
/* Let's refuse some unreasonably big files instead of freezing
* up the browser */
if (file.size > 100000000) {
const message = translate("import_users.errors.unreasonably_big", {
size: (file.size / (1024 * 1024)).toFixed(2),
});
notify(message);
setError(message);
return;
}
try {
parseCsv<ImportLine>(file, {
header: true,
skipEmptyLines: true /* especially for a final EOL in the csv file */,
complete: result => {
if (result.errors) {
setError(result.errors.map(e => e.toString()));
}
/* Papaparse is very lenient, we may be able to salvage
* the data in the file. */
verifyCsv(result, { setValues, setStats, setError });
},
});
} catch {
setError("Unknown error");
return null;
}
};
const verifyCsv = ({ data, meta, errors }: ParseResult<ImportLine>, { setValues, setStats, setError }) => {
/* First, verify the presence of required fields */
const missingFields = expectedFields.filter(eF => !meta.fields?.includes(eF));
if (missingFields.length > 0) {
setError(translate("import_users.error.required_field", { field: missingFields[0] }));
return false;
}
// XXX after deciding on how "name" and friends should be handled below,
// this place will want changes, too.
/* Collect some stats to prevent sneaky csv files from adding admin
users or something.
*/
const stats = {
user_types: { default: 0 },
is_guest: 0,
admin: 0,
deactivated: 0,
password: 0,
avatar_url: 0,
id: 0,
total: data.length,
};
const errorMessages = errors.map(e => e.message);
data.forEach((line, idx) => {
if (line.user_type === undefined || line.user_type === "") {
stats.user_types.default++;
} else {
stats.user_types[line.user_type] += 1;
}
/* XXX correct the csv export that react-admin offers for the users
* resource so it gives sensible field names and doesn't duplicate
* id as "name"?
*/
if (meta.fields?.includes("name")) {
delete line.name;
}
if (meta.fields?.includes("user_type")) {
delete line.user_type;
}
if (meta.fields?.includes("is_admin")) {
delete line.is_admin;
}
["is_guest", "admin", "deactivated"].forEach(f => {
if (line[f] === "true") {
stats[f]++;
line[f] = true; // we need true booleans instead of strings
} else {
if (line[f] !== "false" && line[f] !== "") {
errorMessages.push(
translate("import_users.error.invalid_value", {
field: f,
row: idx,
})
);
}
line[f] = false; // default values to false
}
});
if (line.password !== undefined && line.password !== "") {
stats.password++;
}
if (line.avatar_url !== undefined && line.avatar_url !== "") {
stats.avatar_url++;
}
if (line.id !== undefined && line.id !== "") {
stats.id++;
}
});
if (errorMessages.length > 0) {
setError(errorMessages);
}
setStats(stats);
setValues(data);
return true;
};
const runImport = async () => {
if (progress !== null) {
notify("import_users.errors.already_in_progress");
return;
}
const results = await doImport(
dataProvider,
values,
conflictMode,
passwordMode,
useridMode,
dryRun,
setProgress,
setError
);
setImportResults(results);
// offer CSV download of skipped or errored records
// (so that the user doesn't have to filter out successful
// records manually when fixing stuff in the CSV)
setSkippedRecords(unparseCsv(results.skippedRecords));
if (LOGGING) console.log("Skipped records:");
if (LOGGING) console.log(skippedRecords);
};
// XXX every single one of the requests will restart the activity indicator
// which doesn't look very good.
const doImport = async (
dataProvider: DataProvider,
data: ImportLine[],
conflictMode: string,
passwordMode: boolean,
useridMode: string,
dryRun: boolean,
setProgress: (progress: Progress) => void,
setError: (message: string) => void
): Promise<ImportResult> => {
const skippedRecords: ImportLine[] = [];
const erroredRecords: ImportLine[] = [];
const succeededRecords: ImportLine[] = [];
const changeStats: ChangeStats = {
total: 0,
id: 0,
is_guest: 0,
admin: 0,
password: 0,
};
let entriesDone = 0;
const entriesCount = data.length;
try {
setProgress({ done: entriesDone, limit: entriesCount });
for (const entry of data) {
const userRecord = { ...entry };
// No need to do a bunch of cryptographic random number getting if
// we are using neither a generated password nor a generated user id.
if (useridMode === "ignore" || userRecord.id === undefined) {
userRecord.id = generateRandomMxId();
}
if (passwordMode === false || entry.password === undefined) {
userRecord.password = generateRandomPassword();
}
/* TODO record update stats (especially admin no -> yes, deactivated x -> !x, ... */
/* For these modes we will consider the ID that's in the record.
* If the mode is "stop", we will not continue adding more records, and
* we will offer information on what was already added and what was
* skipped.
*
* If the mode is "skip", we record the record for later, but don't
* send it to the server.
*
* If the mode is "update", we change fields that are reasonable to
* update.
* - If the "password mode" is "true" (i.e. "use passwords from csv"):
* - if the record has a password
* - send the password along with the record
* - if the record has no password
* - generate a new password
* - If the "password mode" is "false"
* - never generate a new password to update existing users with
*/
/* We just act as if there are no IDs in the CSV, so every user will be
* created anew.
* We do a simple retry loop so that an accidental hit on an existing ID
* doesn't trip us up.
*/
if (LOGGING) console.log("will check for existence of record " + JSON.stringify(userRecord));
let retries = 0;
const submitRecord = (recordData: ImportLine) => {
return dataProvider.getOne("users", { id: recordData.id }).then(
async () => {
if (LOGGING) console.log("already existed");
if (useridMode === "update" || conflictMode === "skip") {
skippedRecords.push(recordData);
} else if (conflictMode === "stop") {
throw new Error(
translate("import_users.error.id_exits", {
id: recordData.id,
})
);
} else {
const newRecordData = Object.assign({}, recordData, {
id: generateRandomMxId(),
});
retries++;
if (retries > 512) {
console.warn("retry loop got stuck? pathological situation?");
skippedRecords.push(recordData);
} else {
await submitRecord(newRecordData);
}
}
},
async () => {
if (LOGGING) console.log("OK to create record " + recordData.id + " (" + recordData.displayname + ").");
if (!dryRun) {
await dataProvider.create("users", { data: recordData });
}
succeededRecords.push(recordData);
}
);
};
await submitRecord(userRecord);
entriesDone++;
setProgress({ done: entriesDone, limit: data.length });
}
setProgress(null);
} catch (e) {
setError(
translate("import_users.error.at_entry", {
entry: entriesDone + 1,
message: e instanceof Error ? e.message : String(e),
})
);
setProgress(null);
}
return {
skippedRecords,
erroredRecords,
succeededRecords,
totalRecordCount: entriesCount,
changeStats,
wasDryRun: dryRun,
};
};
const downloadSkippedRecords = () => {
const element = document.createElement("a");
console.log(skippedRecords);
const file = new Blob([skippedRecords], {
type: "text/comma-separated-values",
});
element.href = URL.createObjectURL(file);
element.download = "skippedRecords.csv";
document.body.appendChild(element); // Required for this to work in FireFox
element.click();
};
const onConflictModeChanged = async (e: ChangeEvent<HTMLSelectElement>) => {
if (progress !== null) {
return;
}
const value = e.target.value;
setConflictMode(value);
};
const onPasswordModeChange = (e: ChangeEvent<HTMLInputElement>) => {
if (progress !== null) {
return;
}
setPasswordMode(e.target.checked);
};
const onUseridModeChanged = async (e: ChangeEvent<HTMLSelectElement>) => {
if (progress !== null) {
return;
}
const value = e.target.value;
setUseridMode(value);
};
const onDryRunModeChanged = (e: ChangeEvent<HTMLInputElement>) => {
if (progress !== null) {
return;
}
setDryRun(e.target.checked);
};
// render individual small components
const statsCards = stats &&
!importResults && [
<Container>
<CardHeader title={translate("import_users.cards.importstats.header")} />
<CardContent>
<div>{translate("import_users.cards.importstats.users_total", stats.total)}</div>
<div>{translate("import_users.cards.importstats.guest_count", stats.is_guest)}</div>
<div>{translate("import_users.cards.importstats.admin_count", stats.admin)}</div>
</CardContent>
</Container>,
<Container>
<CardHeader title={translate("import_users.cards.ids.header")} />
<CardContent>
<div>
{stats.id === stats.total
? translate("import_users.cards.ids.all_ids_present")
: translate("import_users.cards.ids.count_ids_present", stats.id)}
</div>
{stats.id > 0 ? (
<div>
<NativeSelect onChange={onUseridModeChanged} value={useridMode} disabled={progress !== null}>
<TranslatableOption value="ignore" text="import_users.cards.ids.mode.ignore" />
<TranslatableOption value="update" text="import_users.cards.ids.mode.update" />
</NativeSelect>
</div>
) : (
""
)}
</CardContent>
</Container>,
<Container>
<CardHeader title={translate("import_users.cards.passwords.header")} />
<CardContent>
<div>
{stats.password === stats.total
? translate("import_users.cards.passwords.all_passwords_present")
: translate("import_users.cards.passwords.count_passwords_present", stats.password)}
</div>
{stats.password > 0 ? (
<div>
<FormControlLabel
control={
<Checkbox checked={passwordMode} disabled={progress !== null} onChange={onPasswordModeChange} />
}
label={translate("import_users.cards.passwords.use_passwords")}
/>
</div>
) : (
""
)}
</CardContent>
</Container>,
];
const conflictCards = stats && !importResults && (
<Container>
<CardHeader title={translate("import_users.cards.conflicts.header")} />
<CardContent>
<div>
<NativeSelect onChange={onConflictModeChanged} value={conflictMode} disabled={progress !== null}>
<TranslatableOption value="stop" text="import_users.cards.conflicts.mode.stop" />
<TranslatableOption value="skip" text="import_users.cards.conflicts.mode.skip" />
</NativeSelect>
</div>
</CardContent>
</Container>
);
const errorCards = error && (
<Container>
<CardHeader title={translate("import_users.error.error")} />
<CardContent>
{(Array.isArray(error) ? error : [error]).map(e => (
<div>{e}</div>
))}
</CardContent>
</Container>
);
const uploadCard = !importResults && (
<Container>
<CardHeader title={translate("import_users.cards.upload.header")} />
<CardContent>
{translate("import_users.cards.upload.explanation")}
<a href="./data/example.csv">example.csv</a>
<br />
<br />
<input type="file" onChange={onFileChange} disabled={progress !== null} />
</CardContent>
</Container>
);
const resultsCard = importResults && (
<CardContent>
<CardHeader title={translate("import_users.cards.results.header")} />
<div>
{translate("import_users.cards.results.total", importResults.totalRecordCount)}
<br />
{translate("import_users.cards.results.successful", importResults.succeededRecords.length)}
<br />
{importResults.skippedRecords.length
? [
translate("import_users.cards.results.skipped", importResults.skippedRecords.length),
<div>
<button onClick={downloadSkippedRecords}>
{translate("import_users.cards.results.download_skipped")}
</button>
</div>,
<br />,
]
: ""}
{importResults.erroredRecords.length
? [translate("import_users.cards.results.skipped", importResults.erroredRecords.length), <br />]
: ""}
<br />
{importResults.wasDryRun && [translate("import_users.cards.results.simulated_only"), <br />]}
</div>
</CardContent>
);
const startImportCard =
!values || values.length === 0 || importResults ? undefined : (
<CardActions>
<FormControlLabel
control={<Checkbox checked={dryRun} onChange={onDryRunModeChanged} disabled={progress !== null} />}
label={translate("import_users.cards.startImport.simulate_only")}
/>
<Button size="large" onClick={runImport} disabled={progress !== null}>
{translate("import_users.cards.startImport.run_import")}
</Button>
{progress !== null ? (
<div>
{progress.done} of {progress.limit} done
</div>
) : null}
</CardActions>
);
const allCards: JSX.Element[] = [];
if (uploadCard) allCards.push(uploadCard);
if (errorCards) allCards.push(errorCards);
if (conflictCards) allCards.push(conflictCards);
if (statsCards) allCards.push(...statsCards);
if (startImportCard) allCards.push(startImportCard);
if (resultsCard) allCards.push(resultsCard);
const cardContainer = <Card>{allCards}</Card>;
return [<Title defaultTitle={translate("import_users.title")} />, cardContainer];
};
export const ImportFeature = FilePicker;

View File

@ -0,0 +1,58 @@
import { Box } from "@mui/material";
import { styled } from "@mui/material/styles";
const LoginFormBox = styled(Box)(({ theme }) => ({
display: "flex",
flexDirection: "column",
minHeight: "calc(100vh - 1rem)",
alignItems: "center",
justifyContent: "flex-start",
background: "url(./images/floating-cogs.svg)",
backgroundColor: theme.palette.mode === "dark" ? theme.palette.background.default : theme.palette.background.paper,
backgroundRepeat: "no-repeat",
backgroundSize: "cover",
[`& .card`]: {
width: "30rem",
marginTop: "6rem",
marginBottom: "6rem",
},
[`& .avatar`]: {
margin: "1rem",
display: "flex",
justifyContent: "center",
},
[`& .icon`]: {
backgroundColor: theme.palette.grey[500],
},
[`& .hint`]: {
marginTop: "1em",
marginBottom: "1em",
display: "flex",
justifyContent: "center",
color: theme.palette.grey[600],
},
[`& .form`]: {
padding: "0 1rem 1rem 1rem",
},
[`& .select`]: {
marginBottom: "2rem",
},
[`& .actions`]: {
padding: "0 1rem 1rem 1rem",
},
[`& .serverVersion`]: {
color: theme.palette.grey[500],
fontFamily: "Roboto, Helvetica, Arial, sans-serif",
marginLeft: "0.5rem",
},
[`& .matrixVersions`]: {
color: theme.palette.grey[500],
fontFamily: "Roboto, Helvetica, Arial, sans-serif",
fontSize: "0.8rem",
marginBottom: "1rem",
marginLeft: "0.5rem",
},
}));
export default LoginFormBox;

View File

@ -1,8 +1,8 @@
import { useState } from "react";
import IconCancel from "@mui/icons-material/Cancel";
import MessageIcon from "@mui/icons-material/Message";
import { Dialog, DialogContent, DialogContentText, DialogTitle } from "@mui/material";
import { useMutation } from "@tanstack/react-query";
import { useState } from "react";
import {
Button,
RaRecord,
@ -20,7 +20,6 @@ import {
useTranslate,
useUnselectAll,
} from "react-admin";
import { useMutation } from "@tanstack/react-query";
const ServerNoticeDialog = ({ open, onClose, onSubmit }) => {
const translate = useTranslate();
@ -64,7 +63,7 @@ export const ServerNoticeButton = () => {
const handleDialogClose = () => setOpen(false);
if (!record) {
return;
return null;
}
const handleSend = (values: Partial<RaRecord>) => {
@ -104,7 +103,7 @@ export const ServerNoticeBulkButton = () => {
const dataProvider = useDataProvider();
const { mutate: sendNotices, isPending } = useMutation({
mutationFn: (data) =>
mutationFn: data =>
dataProvider.createMany("servernotices", {
ids: selectedIds,
data: data,

View File

@ -0,0 +1,68 @@
import ArrowDownwardIcon from "@mui/icons-material/ArrowDownward";
import { Typography, Box, Stack, Accordion, AccordionSummary, AccordionDetails } from "@mui/material";
import { useEffect, useState } from "react";
import { useDataProvider, useRecordContext, useTranslate } from "react-admin";
import { SynapseDataProvider } from "../synapse/dataProvider";
const UserAccountData = () => {
const dataProvider = useDataProvider() as SynapseDataProvider;
const record = useRecordContext();
const translate = useTranslate();
const [globalAccountData, setGlobalAccountData] = useState({});
const [roomsAccountData, setRoomsAccountData] = useState({});
if (!record) {
return null;
}
useEffect(() => {
const fetchAccountData = async () => {
const accountData = await dataProvider.getAccountData(record.id);
setGlobalAccountData(accountData.account_data.global);
setRoomsAccountData(accountData.account_data.rooms);
};
fetchAccountData();
}, []);
if (Object.keys(globalAccountData).length === 0 && Object.keys(roomsAccountData).length === 0) {
return (
<Typography variant="body2">
{translate("ra.navigation.no_results", {
name: "Account Data",
_: "No results found.",
})}
</Typography>
);
}
return (
<>
<Stack direction="column" spacing={2} width="100%">
<Typography variant="h6">{translate("resources.users.account_data.title")}</Typography>
<Typography variant="body1" component="div">
<Box>
<Accordion>
<AccordionSummary expandIcon={<ArrowDownwardIcon />}>
<Typography variant="h6">{translate("resources.users.account_data.global")}</Typography>
</AccordionSummary>
<AccordionDetails>
<Box sx={{ whiteSpace: "pre-wrap" }}>{JSON.stringify(globalAccountData, null, 4)}</Box>
</AccordionDetails>
</Accordion>
<Accordion>
<AccordionSummary expandIcon={<ArrowDownwardIcon />}>
<Typography variant="h6">{translate("resources.users.account_data.rooms")}</Typography>
</AccordionSummary>
<AccordionDetails>
<Box sx={{ whiteSpace: "pre-wrap" }}>{JSON.stringify(roomsAccountData, null, 4)}</Box>
</AccordionDetails>
</Accordion>
</Box>
</Typography>
</Stack>
</>
);
};
export default UserAccountData;

View File

@ -0,0 +1,96 @@
import { Stack, Typography } from "@mui/material";
import { TextField } from "@mui/material";
import { useEffect, useState } from "react";
import { useDataProvider, useRecordContext, useTranslate } from "react-admin";
import { useFormContext } from "react-hook-form";
const RateLimitRow = ({
limit,
value,
updateRateLimit,
}: {
limit: string;
value: object;
updateRateLimit: (limit: string, value: integer | null) => void;
}) => {
const translate = useTranslate();
const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {
const value = parseInt(event.target.value);
if (isNaN(value)) {
updateRateLimit(limit, null);
return;
}
updateRateLimit(limit, value);
};
return (
<Stack
spacing={1}
alignItems="start"
sx={{
padding: 2,
}}
>
<TextField
type="number"
value={value}
onChange={handleChange}
slotProps={{
inputLabel: {
shrink: true,
},
}}
label={translate(`resources.users.limits.${limit}`)}
/>
<Stack>
<Typography variant="body2" color="text.secondary">
{translate(`resources.users.limits.${limit}_text`)}
</Typography>
</Stack>
</Stack>
);
};
const UserRateLimits = () => {
const record = useRecordContext();
const form = useFormContext();
const dataProvider = useDataProvider();
const [rateLimits, setRateLimits] = useState({
messages_per_second: "", // we are setting string here to make the number field empty by default, null is prohibited by the field validation
burst_count: "",
});
if (!record) {
return null;
}
useEffect(() => {
const fetchRateLimits = async () => {
const rateLimits = await dataProvider.getRateLimits(record.id);
if (Object.keys(rateLimits).length > 0) {
setRateLimits(rateLimits);
}
};
fetchRateLimits();
}, []);
const updateRateLimit = async (limit: string, value: integer | null) => {
const updatedRateLimits = { ...rateLimits, [limit]: value };
setRateLimits(updatedRateLimits);
form.setValue(`rates.${limit}`, value, { shouldDirty: true });
};
return (
<>
<Stack direction="column">
{Object.keys(rateLimits).map((limit: string) => (
<RateLimitRow key={limit} limit={limit} value={rateLimits[limit]} updateRateLimit={updateRateLimit} />
))}
</Stack>
</>
);
};
export default UserRateLimits;

View File

@ -1,28 +0,0 @@
export const DATE_FORMAT: Intl.DateTimeFormatOptions = {
year: "numeric",
month: "2-digit",
day: "2-digit",
hour: "2-digit",
minute: "2-digit",
second: "2-digit",
};
export const dateParser = (v: string | number | Date): number => {
const d = new Date(v);
return d.getTime();
};
export const dateFormatter = (v: string | number | Date | undefined | null): string => {
if (v === undefined || v === null) return "";
const d = new Date(v);
const pad = "00";
const year = d.getFullYear().toString();
const month = (pad + (d.getMonth() + 1).toString()).slice(-2);
const day = (pad + d.getDate().toString()).slice(-2);
const hour = (pad + d.getHours().toString()).slice(-2);
const minute = (pad + d.getMinutes().toString()).slice(-2);
// target format yyyy-MM-ddThh:mm
return `${year}-${month}-${day}T${hour}:${minute}`;
};

View File

@ -0,0 +1,214 @@
import ContentCopyIcon from "@mui/icons-material/ContentCopy";
import DownloadIcon from "@mui/icons-material/Download";
import PaymentIcon from "@mui/icons-material/Payment";
import {
Box,
Typography,
Link,
Table,
TableBody,
TableCell,
TableContainer,
TableHead,
TableRow,
Paper,
Chip,
Button,
Tooltip,
} from "@mui/material";
import { Stack } from "@mui/material";
import IconButton from "@mui/material/IconButton";
import { useState, useEffect } from "react";
import { useDataProvider, useNotify } from "react-admin";
import { useAppContext } from "../../Context";
import { SynapseDataProvider, Payment } from "../../synapse/dataProvider";
const TruncatedUUID = ({ uuid }): React.ReactElement => {
const short = `${uuid.slice(0, 8)}...${uuid.slice(-6)}`;
const copyToClipboard = () => navigator.clipboard.writeText(uuid);
return (
<Tooltip title={uuid}>
<span style={{ display: "inline-flex", alignItems: "center" }}>
{short}
<IconButton size="small" onClick={copyToClipboard}>
<ContentCopyIcon fontSize="small" />
</IconButton>
</span>
</Tooltip>
);
};
const BillingPage = () => {
const { etkeccAdmin } = useAppContext();
const dataProvider = useDataProvider() as SynapseDataProvider;
const notify = useNotify();
const [paymentsData, setPaymentsData] = useState<Payment[]>([]);
const [total, setTotal] = useState(0);
const [loading, setLoading] = useState(true);
const [failure, setFailure] = useState<string | null>(null);
const [downloadingInvoice, setDownloadingInvoice] = useState<string | null>(null);
useEffect(() => {
const fetchBillingData = async () => {
if (!etkeccAdmin) return;
try {
setLoading(true);
const response = await dataProvider.getPayments(etkeccAdmin);
setPaymentsData(response.payments);
setTotal(response.total);
} catch (error) {
console.error("Error fetching billing data:", error);
setFailure(error instanceof Error ? error.message : error);
} finally {
setLoading(false);
}
};
fetchBillingData();
}, [etkeccAdmin, dataProvider, notify]);
const handleInvoiceDownload = async (transactionId: string) => {
if (!etkeccAdmin || downloadingInvoice) return;
try {
setDownloadingInvoice(transactionId);
await dataProvider.getInvoice(etkeccAdmin, transactionId);
notify("Invoice download started", { type: "info" });
} catch (error) {
// Use the specific error message from the dataProvider
const errorMessage = error instanceof Error ? error.message : "Error downloading invoice";
notify(errorMessage, { type: "error" });
console.error("Error downloading invoice:", error);
} finally {
setDownloadingInvoice(null);
}
};
const header = (
<Box>
<Typography variant="h4">
<PaymentIcon sx={{ verticalAlign: "middle", mr: 1 }} /> Billing
</Typography>
<Typography variant="body1">
View payments and generate invoices from here. More details about billing can be found{" "}
<Link href="https://etke.cc/help/extras/scheduler/#payments" target="_blank">
here
</Link>
.
<br />
If you'd like to change your billing email, or add company details, please{" "}
<Link href="https://etke.cc/contacts/" target="_blank">
contact etke.cc support
</Link>
.
</Typography>
</Box>
);
if (loading) {
return (
<Stack spacing={3} mt={3}>
{header}
<Box sx={{ mt: 3 }}>
<Typography>Loading billing information...</Typography>
</Box>
</Stack>
);
}
if (failure) {
return (
<Stack spacing={3} mt={3}>
{header}
<Box sx={{ mt: 3 }}>
<Typography>
There was a problem loading your billing information.
<br />
This might be a temporary issue - please try again in a few minutes.
<br />
If it persists, contact{" "}
<Link href="https://etke.cc/contacts/" target="_blank">
etke.cc support team
</Link>{" "}
with the following error message:
</Typography>
<Typography variant="body2" color="error" sx={{ mt: 1 }}>
{failure}
</Typography>
</Box>
</Stack>
);
}
return (
<Stack spacing={3} mt={3}>
{header}
<Box sx={{ mt: 2 }}>
<Typography variant="h5">Payment Summary</Typography>
<Box sx={{ mt: 1, display: "flex", alignItems: "center", gap: 1 }}>
<Typography variant="body1">Total Payments:</Typography>
<Chip label={total} color="primary" variant="outlined" />
</Box>
</Box>
<Box sx={{ mt: 2 }}>
<Typography variant="h5" sx={{ mb: 2 }}>
Payment History
</Typography>
{paymentsData.length === 0 ? (
<Typography variant="body1">
No payments found. If you believe that's an error, please{" "}
<Link href="https://etke.cc/contacts/" target="_blank">
contact etke.cc support
</Link>
.
</Typography>
) : (
<TableContainer component={Paper}>
<Table>
<TableHead>
<TableRow>
<TableCell>Transaction ID</TableCell>
<TableCell>Email</TableCell>
<TableCell>Type</TableCell>
<TableCell>Amount</TableCell>
<TableCell>Paid At</TableCell>
<TableCell>Download Invoice</TableCell>
</TableRow>
</TableHead>
<TableBody>
{paymentsData.map(payment => (
<TableRow key={payment.transaction_id}>
<TableCell>
<TruncatedUUID uuid={payment.transaction_id} />
</TableCell>
<TableCell>{payment.email}</TableCell>
<TableCell>{payment.is_subscription ? "Subscription" : "One-time"}</TableCell>
<TableCell>${payment.amount.toFixed(2)}</TableCell>
<TableCell>{new Date(payment.paid_at).toLocaleDateString()}</TableCell>
<TableCell>
<Button
variant="outlined"
size="small"
startIcon={<DownloadIcon />}
onClick={() => handleInvoiceDownload(payment.transaction_id)}
disabled={downloadingInvoice === payment.transaction_id}
>
{downloadingInvoice === payment.transaction_id ? "Downloading..." : "Invoice"}
</Button>
</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</TableContainer>
)}
</Box>
</Stack>
);
};
export default BillingPage;

View File

@ -0,0 +1,37 @@
import { Stack, Tooltip, Typography, Box, Link } from "@mui/material";
import { useStore } from "react-admin";
import { ServerProcessResponse } from "../../synapse/dataProvider";
import { getTimeSince } from "../../utils/date";
const CurrentlyRunningCommand = () => {
const [serverProcess, _setServerProcess] = useStore<ServerProcessResponse>("serverProcess", {
command: "",
locked_at: "",
});
const { command, locked_at } = serverProcess;
if (!command || !locked_at) {
return null;
}
return (
<Stack spacing={1} direction="row" alignItems="center">
<Box sx={{ display: "flex", alignItems: "center", gap: 1 }}>
<Typography variant="h5">Currently running:</Typography>
<Typography variant="h5" color="text.secondary">
<Link href={"https://etke.cc/help/extras/scheduler/#" + command} target="_blank">
{command}
</Link>
<Tooltip title={locked_at.toString()}>
<Typography component="span" color="text.secondary" sx={{ display: "inline-block", ml: 1 }}>
(started {getTimeSince(locked_at)} ago)
</Typography>
</Tooltip>
</Typography>
</Box>
</Stack>
);
};
export default CurrentlyRunningCommand;

View File

@ -0,0 +1,74 @@
# etke.cc-specific components
This directory contains [etke.cc](https://etke.cc)-specific components, unusable for any other purposes and/or configuration.
We at [etke.cc](https://etke.cc) attempting to develop everything open-source, but some things are too specific to be used by anyone else. This directory contains such components - they are only available for [etke.cc](https://etke.cc) customers.
Due to the specifics mentioned above, these components are documented here rather than in the [docs](../../../docs/README.md), plus they are not supported as part of the Synapse Admin open-source project (i.e.: no issues, no PRs, no support, no requests, etc.).
## Components
### Server Status icon
![Server Status icon](../../../screenshots/etke.cc/server-status/indicator.webp)
In the application bar the new monitoring icon is displayed that shows the current server status, and has the following color dot (and tooltip indicators):
* 🟢 (green) - the server is up and running, everything is fine, no issues detected
* 🟡 (yellow) - the server is up and running, but there is a command in progress (likely [maintenance](https://etke.cc/help/extras/scheduler/#maintenance)), so some temporary issues may occur - that's totally fine
* 🔴 (red) - there is at least 1 issue with one of the server's components
![Server Status icon in sidebar](../../../screenshots/etke.cc/server-status/indicator-sidebar.webp)
The same icon (and link to the [Server Status page](#server-status-page)) is displayed in the sidebar.
### Server Status page
![Server Status Page](../../../screenshots/etke.cc/server-status/page.webp)
When you click on the [Server Status icon](#server-status-icon) in the application bar, you will be redirected to the
Server Status page. This page contains the following information:
* Overall server status (up/updating/has issues)
* Details about the currently running command (if any)
* Details about the server's components statuses (up/down with error details and suggested actions) by categories
This is [a Monitoring report](https://etke.cc/services/monitoring/)
### Server Notifications icon
![Server Notifications icon](../../../screenshots/etke.cc/server-notifications/badge.webp)
In the application bar the new notifications icon is displayed that shows the number of unread (not removed) notifications
### Server Notifications page
![Server Notifications Page](../../../screenshots/etke.cc/server-notifications/page.webp)
When you click on a notification from the [Server Notifications icon](#server-notifications-icon)'s list in the application bar, you will be redirected to the Server Notifications page. This page contains the full text of all the notifications you have about your server.
### Server Actions Page
![Server Actions Page](../../../screenshots/etke.cc/server-actions/page.webp)
When you click on the `Server Actions` sidebar menu item, you will be redirected to the Server Actions page.
On this page you can do the following:
* [Run a command](#server-commands-panel) on your server immediately
* [Schedule a command](https://etke.cc/help/extras/scheduler/#schedule) to run at a specific date and time
* [Configure a recurring schedule](https://etke.cc/help/extras/scheduler/#recurring) for a command to run at a specific time every week
### Server Commands Panel
![Server Commands Panel](../../../screenshots/etke.cc/server-commands/panel.webp)
When you open [Server Actions page](#server-status-page), you will see the Server Commands panel.
This panel contains all [the commands](https://etke.cc/help/extras/scheduler/#commands) you can run on your server in 1 click.
Once command is finished, you will get a notification about the result.
### Billing Page
![Billing Page](../../../screenshots/etke.cc/billing/page.webp)
When you click on the `Billing` sidebar menu item, you will be see the Billing page.
On this page you can see the list of successful payments and invoices.

View File

@ -0,0 +1,51 @@
import RestoreIcon from "@mui/icons-material/Restore";
import ScheduleIcon from "@mui/icons-material/Schedule";
import { Box, Typography, Link } from "@mui/material";
import { Stack } from "@mui/material";
import CurrentlyRunningCommand from "./CurrentlyRunningCommand";
import ServerCommandsPanel from "./ServerCommandsPanel";
import RecurringCommandsList from "./schedules/components/recurring/RecurringCommandsList";
import ScheduledCommandsList from "./schedules/components/scheduled/ScheduledCommandsList";
const ServerActionsPage = () => {
return (
<Stack spacing={3} mt={3}>
<Stack direction="column">
<CurrentlyRunningCommand />
<ServerCommandsPanel />
</Stack>
<Box sx={{ mt: 2 }}>
<Typography variant="h5">
<ScheduleIcon sx={{ verticalAlign: "middle", mr: 1 }} /> Scheduled commands
</Typography>
<Typography variant="body1">
The following commands are scheduled to run at specific times. You can view their details and modify them as
needed. More details about the mode can be found{" "}
<Link href="https://etke.cc/help/extras/scheduler/#schedule" target="_blank">
here
</Link>
.
</Typography>
<ScheduledCommandsList />
</Box>
<Box sx={{ mt: 2 }}>
<Typography variant="h5">
<RestoreIcon sx={{ verticalAlign: "middle", mr: 1 }} /> Recurring commands
</Typography>
<Typography variant="body1">
The following commands are set to run at specific weekday and time (weekly). You can view their details and
modify them as needed. More details about the mode can be found{" "}
<Link href="https://etke.cc/help/extras/scheduler/#recurring" target="_blank">
here
</Link>
.
</Typography>
<RecurringCommandsList />
</Box>
</Stack>
);
};
export default ServerActionsPage;

View File

@ -0,0 +1,210 @@
import { PlayArrow, CheckCircle, HelpCenter, Construction } from "@mui/icons-material";
import {
Table,
TableBody,
TableCell,
TableContainer,
TableHead,
TableRow,
Paper,
Alert,
TextField,
Box,
Link,
Typography,
} from "@mui/material";
import { useEffect, useState } from "react";
import { Button, Loading, useDataProvider, useCreatePath, useStore } from "react-admin";
import { Link as RouterLink } from "react-router-dom";
import { useAppContext } from "../../Context";
import { useServerCommands } from "./hooks/useServerCommands";
import { ServerCommand, ServerProcessResponse } from "../../synapse/dataProvider";
import { Icons } from "../../utils/icons";
const renderIcon = (icon: string) => {
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
const IconComponent = Icons[icon] as React.ComponentType<any> | undefined;
return IconComponent ? <IconComponent sx={{ verticalAlign: "middle", mr: 1 }} /> : null;
};
const ServerCommandsPanel = () => {
const { etkeccAdmin } = useAppContext();
if (!etkeccAdmin) {
return null;
}
const createPath = useCreatePath();
const { isLoading, serverCommands, setServerCommands } = useServerCommands();
const [serverProcess, setServerProcess] = useStore<ServerProcessResponse>("serverProcess", {
command: "",
locked_at: "",
});
const [commandIsRunning, setCommandIsRunning] = useState<boolean>(serverProcess.command !== "");
const [commandResult, setCommandResult] = useState<React.ReactNode[]>([]);
const dataProvider = useDataProvider();
useEffect(() => {
if (serverProcess.command === "") {
setCommandIsRunning(false);
}
}, [serverProcess]);
const setCommandAdditionalArgs = (command: string, additionalArgs: string) => {
const updatedServerCommands = { ...serverCommands };
updatedServerCommands[command].additionalArgs = additionalArgs;
setServerCommands(updatedServerCommands);
};
const runCommand = async (command: string) => {
setCommandResult([]);
setCommandIsRunning(true);
try {
const additionalArgs = serverCommands[command].additionalArgs || "";
const requestParams = additionalArgs ? { args: additionalArgs } : {};
const response = await dataProvider.runServerCommand(etkeccAdmin, command, requestParams);
if (!response.success) {
setCommandIsRunning(false);
return;
}
// Update UI with success message
const commandResults = buildCommandResultMessages(command, additionalArgs);
setCommandResult(commandResults);
// Reset the additional args field
resetCommandArgs(command);
// Update server process status
await updateServerProcessStatus(serverCommands[command]);
} catch (error) {
console.error("Error running command:", error);
setCommandIsRunning(false);
}
};
const buildCommandResultMessages = (command: string, additionalArgs: string): React.ReactNode[] => {
const results: React.ReactNode[] = [];
let commandScheduledText = `Command scheduled: ${command}`;
if (additionalArgs) {
commandScheduledText += `, with additional args: ${additionalArgs}`;
}
results.push(<Box key="command-text">{commandScheduledText}</Box>);
results.push(
<Box key="notification-link">
Expect your result in the{" "}
<RouterLink to={createPath({ resource: "server_notifications", type: "list" })}>Notifications</RouterLink> page
soon.
</Box>
);
return results;
};
const resetCommandArgs = (command: string) => {
const updatedServerCommands = { ...serverCommands };
updatedServerCommands[command].additionalArgs = "";
setServerCommands(updatedServerCommands);
};
const updateServerProcessStatus = async (command: ServerCommand) => {
const commandIsLocking = command.with_lock;
const serverProcess = await dataProvider.getServerRunningProcess(etkeccAdmin, true);
if (!commandIsLocking && serverProcess.command === "") {
// if command is not locking, we simulate the "lock" mechanism so notifications will be refetched
serverProcess["command"] = command.name;
serverProcess["locked_at"] = new Date().toISOString();
}
setServerProcess({ ...serverProcess });
};
if (isLoading) {
return <Loading />;
}
return (
<>
<Typography variant="h5">
<Construction sx={{ verticalAlign: "middle", mr: 1 }} /> Available Commands
</Typography>
<Typography variant="body1" sx={{ mt: 0 }}>
The following commands are available to run. More details about each of them can be found{" "}
<Link href="https://etke.cc/help/extras/scheduler/#commands" target="_blank">
here
</Link>
.
</Typography>
<TableContainer component={Paper} sx={{ mt: 2 }}>
<Table sx={{ minWidth: 450 }} size="small" aria-label="simple table">
<TableHead>
<TableRow>
<TableCell>Command</TableCell>
<TableCell></TableCell>
<TableCell>Description</TableCell>
<TableCell></TableCell>
</TableRow>
</TableHead>
<TableBody>
{Object.entries(serverCommands).map(([command, { icon, args, description, additionalArgs }]) => (
<TableRow key={command}>
<TableCell scope="row">
<Box>
{renderIcon(icon)}
{command}
</Box>
</TableCell>
<TableCell>
<Link href={"https://etke.cc/help/extras/scheduler/#" + command} target="_blank">
<Button size="small" startIcon={<HelpCenter />} title={command + " help"} />
</Link>
</TableCell>
<TableCell>{description}</TableCell>
<TableCell>
{args && (
<TextField
size="small"
variant="standard"
onChange={e => {
setCommandAdditionalArgs(command, e.target.value);
}}
value={additionalArgs}
/>
)}
<Button
size="small"
variant="contained"
color="primary"
label="Run"
startIcon={<PlayArrow />}
onClick={() => {
runCommand(command);
}}
disabled={
commandIsRunning || (args && typeof additionalArgs === "string" && additionalArgs.length === 0)
}
></Button>
</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</TableContainer>
{commandResult.length > 0 && (
<Alert icon={<CheckCircle fontSize="inherit" />} severity="success">
{commandResult.map((result, index) => (
<div key={index}>{result}</div>
))}
</Alert>
)}
</>
);
};
export default ServerCommandsPanel;

View File

@ -0,0 +1,245 @@
import DeleteIcon from "@mui/icons-material/Delete";
import NotificationsIcon from "@mui/icons-material/Notifications";
import {
Badge,
useTheme,
Button,
Paper,
Popper,
ClickAwayListener,
Box,
List,
ListItem,
ListItemText,
Typography,
ListSubheader,
IconButton,
Divider,
Tooltip,
} from "@mui/material";
import { Fragment, useEffect, useState } from "react";
import { useDataProvider, useStore } from "react-admin";
import { useNavigate } from "react-router";
import { useAppContext } from "../../Context";
import { ServerNotificationsResponse, ServerProcessResponse } from "../../synapse/dataProvider";
import { getTimeSince } from "../../utils/date";
// 5 minutes
const SERVER_NOTIFICATIONS_INTERVAL_TIME = 300000;
const useServerNotifications = () => {
const [serverNotifications, setServerNotifications] = useStore<ServerNotificationsResponse>("serverNotifications", {
notifications: [],
success: false,
});
const [serverProcess, _setServerProcess] = useStore<ServerProcessResponse>("serverProcess", {
command: "",
locked_at: "",
});
const { command, locked_at } = serverProcess;
const { etkeccAdmin } = useAppContext();
const dataProvider = useDataProvider();
const { notifications, success } = serverNotifications;
const fetchNotifications = async () => {
const notificationsResponse: ServerNotificationsResponse = await dataProvider.getServerNotifications(
etkeccAdmin,
command !== ""
);
const serverNotifications = [...notificationsResponse.notifications];
serverNotifications.reverse();
setServerNotifications({
...notificationsResponse,
notifications: serverNotifications,
success: notificationsResponse.success,
});
};
const deleteServerNotifications = async () => {
const deleteResponse = await dataProvider.deleteServerNotifications(etkeccAdmin);
if (deleteResponse.success) {
setServerNotifications({
notifications: [],
success: true,
});
}
};
useEffect(() => {
let serverNotificationsInterval: NodeJS.Timeout | null = null;
let timeoutId: NodeJS.Timeout | null = null;
if (etkeccAdmin) {
fetchNotifications();
timeoutId = setTimeout(() => {
// start the interval after the SERVER_NOTIFICATIONS_INTERVAL_TIME to avoid too many requests
serverNotificationsInterval = setInterval(fetchNotifications, SERVER_NOTIFICATIONS_INTERVAL_TIME);
}, SERVER_NOTIFICATIONS_INTERVAL_TIME);
}
return () => {
if (timeoutId) {
clearTimeout(timeoutId);
}
if (serverNotificationsInterval) {
clearInterval(serverNotificationsInterval);
}
};
}, [etkeccAdmin, command, locked_at]);
return { success, notifications, deleteServerNotifications };
};
export const ServerNotificationsBadge = () => {
const navigate = useNavigate();
const { success, notifications, deleteServerNotifications } = useServerNotifications();
const theme = useTheme();
// Modify menu state to work with Popper
const [anchorEl, setAnchorEl] = useState<null | HTMLElement>(null);
const open = Boolean(anchorEl);
const handleOpen = (event: React.MouseEvent<HTMLElement>) => {
setAnchorEl(anchorEl ? null : event.currentTarget);
};
const handleClose = () => {
setAnchorEl(null);
};
const handleSeeAllNotifications = () => {
handleClose();
navigate("/server_notifications");
};
const handleClearAllNotifications = async () => {
deleteServerNotifications();
handleClose();
};
if (!success) {
return null;
}
return (
<Box>
<IconButton onClick={handleOpen} sx={{ color: theme.palette.common.white }}>
<Tooltip
title={
notifications && notifications.length > 0
? `${notifications.length} new notifications`
: `No notifications yet`
}
>
{(notifications && notifications.length > 0 && (
<Badge badgeContent={notifications.length} color="error">
<NotificationsIcon />
</Badge>
)) || <NotificationsIcon />}
</Tooltip>
</IconButton>
<Popper open={open} anchorEl={anchorEl} placement="bottom-end" style={{ zIndex: 1300 }}>
<ClickAwayListener onClickAway={handleClose}>
<Paper
elevation={3}
sx={{
p: 1,
maxHeight: "350px",
paddingTop: 0,
overflowY: "auto",
minWidth: "300px",
maxWidth: {
xs: "100vw", // Full width on mobile
sm: "400px", // Fixed width on desktop
},
}}
>
{!notifications || notifications.length === 0 ? (
<Typography sx={{ p: 1 }} variant="body2">
No new notifications
</Typography>
) : (
<List sx={{ p: 0 }} dense={true}>
<ListSubheader
sx={{
display: "flex",
justifyContent: "space-between",
alignItems: "center",
fontWeight: "bold",
}}
>
<Typography variant="h6">Notifications</Typography>
<Box
sx={{ cursor: "pointer", color: theme.palette.primary.main }}
onClick={() => handleSeeAllNotifications()}
>
See all notifications
</Box>
</ListSubheader>
<Divider />
{notifications.map((notification, index) => {
return (
<Fragment key={notification.event_id ? notification.event_id + index : index}>
<ListItem
onClick={() => handleSeeAllNotifications()}
sx={{
display: "flex",
flexDirection: "column",
alignItems: "flex-start",
overflow: "hidden",
"&:hover": {
backgroundColor: "action.hover",
cursor: "pointer",
},
}}
>
<ListItemText
primary={
<Typography
variant="body2"
sx={{
overflow: "hidden",
textOverflow: "ellipsis",
}}
dangerouslySetInnerHTML={{ __html: notification.output.split("\n")[0] }}
/>
}
/>
<ListItemText
primary={
<Typography variant="body2" sx={{ color: theme.palette.text.secondary }}>
{getTimeSince(notification.sent_at) + " ago"}
</Typography>
}
/>
</ListItem>
<Divider />
</Fragment>
);
})}
<ListItem>
<Button
key="clear-all-notifications"
onClick={() => handleClearAllNotifications()}
size="small"
color="error"
sx={{
pl: 0,
pt: 1,
verticalAlign: "middle",
}}
>
<DeleteIcon fontSize="small" sx={{ mr: 1 }} />
Clear all
</Button>
</ListItem>
</List>
)}
</Paper>
</ClickAwayListener>
</Popper>
</Box>
);
};

View File

@ -0,0 +1,66 @@
import DeleteIcon from "@mui/icons-material/Delete";
import { Box, Typography, Paper, Button } from "@mui/material";
import { Stack } from "@mui/material";
import { Tooltip } from "@mui/material";
import { useStore } from "react-admin";
import { useAppContext } from "../../Context";
import dataProvider, { ServerNotificationsResponse } from "../../synapse/dataProvider";
import { getTimeSince } from "../../utils/date";
const DisplayTime = ({ date }: { date: string }) => {
const dateFromDateString = new Date(date.replace(" ", "T") + "Z");
return <Tooltip title={dateFromDateString.toLocaleString()}>{<span>{getTimeSince(date) + " ago"}</span>}</Tooltip>;
};
const ServerNotificationsPage = () => {
const { etkeccAdmin } = useAppContext();
const [serverNotifications, setServerNotifications] = useStore<ServerNotificationsResponse>("serverNotifications", {
notifications: [],
success: false,
});
const notifications = serverNotifications.notifications;
return (
<Stack spacing={3} mt={3}>
<Stack spacing={1} direction="row" alignItems="center">
<Box sx={{ display: "flex", alignItems: "center", justifyContent: "space-between", width: "100%", gap: 1 }}>
<Typography variant="h4">Server Notifications</Typography>
<Button
variant="text"
color="error"
onClick={async () => {
await dataProvider.deleteServerNotifications(etkeccAdmin);
setServerNotifications({
notifications: [],
success: true,
});
}}
>
<DeleteIcon fontSize="small" sx={{ mr: 1 }} /> Clear
</Button>
</Box>
</Stack>
{notifications.length === 0 ? (
<Paper sx={{ p: 2 }}>
<Typography>No new notifications.</Typography>
</Paper>
) : (
notifications.map((notification, index) => (
<Paper key={notification.event_id ? notification.event_id : index} sx={{ p: 2 }}>
<Stack spacing={1}>
<Typography variant="subtitle1" fontWeight="bold" color="text.secondary">
<DisplayTime date={notification.sent_at} />
</Typography>
<Typography dangerouslySetInnerHTML={{ __html: notification.output }} />
</Stack>
</Paper>
))
)}
</Stack>
);
};
export default ServerNotificationsPage;

View File

@ -0,0 +1,241 @@
import MonitorHeartIcon from "@mui/icons-material/MonitorHeart";
import { Avatar, Badge, Box, Theme, Tooltip } from "@mui/material";
import { BadgeProps } from "@mui/material/Badge";
import { styled } from "@mui/material/styles";
import { useTheme } from "@mui/material/styles";
import { useEffect } from "react";
import { Button, useDataProvider, useStore } from "react-admin";
import { useNavigate } from "react-router";
import { useAppContext } from "../../Context";
import { ServerProcessResponse, ServerStatusResponse } from "../../synapse/dataProvider";
interface StyledBadgeProps extends BadgeProps {
backgroundColor: string;
badgeColor: string;
theme?: Theme;
}
const StyledBadge = styled(Badge, {
shouldForwardProp: prop => !["badgeColor", "backgroundColor"].includes(prop as string),
})<StyledBadgeProps>(({ theme, backgroundColor, badgeColor }) => ({
"& .MuiBadge-badge": {
backgroundColor: backgroundColor,
color: badgeColor,
boxShadow: `0 0 0 2px ${theme.palette.background.paper}`,
"&::after": {
position: "absolute",
top: 0,
left: 0,
width: "100%",
height: "100%",
borderRadius: "50%",
animation: "ripple 2.5s infinite ease-in-out",
border: "1px solid currentColor",
content: '""',
},
},
"@keyframes ripple": {
"0%": {
transform: "scale(.8)",
opacity: 1,
},
"100%": {
transform: "scale(2.4)",
opacity: 0,
},
},
}));
// every 5 minutes
const SERVER_STATUS_INTERVAL_TIME = 5 * 60 * 1000;
// every 5 seconds
const SERVER_CURRENT_PROCCESS_INTERVAL_TIME = 5 * 1000;
const useServerStatus = () => {
const [serverStatus, setServerStatus] = useStore<ServerStatusResponse>("serverStatus", {
ok: false,
success: false,
host: "",
results: [],
});
const [serverProcess, _setServerProcess] = useStore<ServerProcessResponse>("serverProcess", {
command: "",
locked_at: "",
});
const { command } = serverProcess;
const { etkeccAdmin } = useAppContext();
const dataProvider = useDataProvider();
const isOkay = serverStatus.ok;
const successCheck = serverStatus.success;
const checkServerStatus = async () => {
const serverStatus: ServerStatusResponse = await dataProvider.getServerStatus(etkeccAdmin, command !== "");
setServerStatus({
ok: serverStatus.ok,
success: serverStatus.success,
host: serverStatus.host,
results: serverStatus.results,
});
};
useEffect(() => {
let serverStatusInterval: NodeJS.Timeout | null = null;
let timeoutId: NodeJS.Timeout | null = null;
if (etkeccAdmin) {
checkServerStatus();
timeoutId = setTimeout(() => {
// start the interval after 10 seconds to avoid too many requests
serverStatusInterval = setInterval(checkServerStatus, SERVER_STATUS_INTERVAL_TIME);
}, 10000);
} else {
setServerStatus({ ok: false, success: false, host: "", results: [] });
}
return () => {
if (timeoutId) {
clearTimeout(timeoutId);
}
if (serverStatusInterval) {
clearInterval(serverStatusInterval);
}
};
}, [etkeccAdmin, command]);
return { isOkay, successCheck };
};
const useCurrentServerProcess = () => {
const [serverProcess, setServerProcess] = useStore<ServerProcessResponse>("serverProcess", {
command: "",
locked_at: "",
});
const { etkeccAdmin } = useAppContext();
const dataProvider = useDataProvider();
const { command, locked_at } = serverProcess;
const checkServerRunningProcess = async () => {
const serverProcess: ServerProcessResponse = await dataProvider.getServerRunningProcess(
etkeccAdmin,
command !== ""
);
setServerProcess({
...serverProcess,
command: serverProcess.command,
locked_at: serverProcess.locked_at,
});
};
useEffect(() => {
let serverCheckInterval: NodeJS.Timeout | null = null;
let timeoutId: NodeJS.Timeout | null = null;
if (etkeccAdmin) {
checkServerRunningProcess();
timeoutId = setTimeout(() => {
serverCheckInterval = setInterval(checkServerRunningProcess, SERVER_CURRENT_PROCCESS_INTERVAL_TIME);
}, 5000);
} else {
setServerProcess({ command: "", locked_at: "" });
}
return () => {
if (timeoutId) {
clearTimeout(timeoutId);
}
if (serverCheckInterval) {
clearInterval(serverCheckInterval);
}
};
}, [etkeccAdmin, command]);
return { command, locked_at };
};
export const ServerStatusStyledBadge = ({
command,
locked_at,
isOkay,
isLoaded,
inSidebar = false,
}: {
command: string;
locked_at: string;
isOkay: boolean;
isLoaded: boolean;
inSidebar: boolean;
}) => {
const theme = useTheme();
let badgeBackgroundColor = isLoaded
? isOkay
? theme.palette.success.light
: theme.palette.error.main
: theme.palette.grey[600];
let badgeColor = isLoaded
? isOkay
? theme.palette.success.light
: theme.palette.error.main
: theme.palette.grey[600];
if (command && locked_at) {
badgeBackgroundColor = theme.palette.warning.main;
badgeColor = theme.palette.warning.main;
}
let avatarBackgroundColor = theme.palette.mode === "dark" ? theme.palette.background.default : "#2196f3";
if (inSidebar) {
avatarBackgroundColor = theme.palette.grey[600];
}
return (
<StyledBadge
overlap="circular"
anchorOrigin={{ vertical: "bottom", horizontal: "right" }}
variant="dot"
backgroundColor={badgeBackgroundColor}
badgeColor={badgeColor}
>
<Avatar sx={{ height: 24, width: 24, background: avatarBackgroundColor }}>
<MonitorHeartIcon sx={{ height: 22, width: 22, color: theme.palette.common.white }} />
</Avatar>
</StyledBadge>
);
};
const ServerStatusBadge = () => {
const { isOkay, successCheck } = useServerStatus();
const { command, locked_at } = useCurrentServerProcess();
const navigate = useNavigate();
if (!successCheck) {
return null;
}
const handleServerStatusClick = () => {
navigate("/server_status");
};
let tooltipText = "Click to view Server Status";
if (command && locked_at) {
tooltipText = `Running: ${command}; ${tooltipText}`;
}
return (
<Button onClick={handleServerStatusClick} size="medium" sx={{ minWidth: "auto", ".MuiButton-startIcon": { m: 0 } }}>
<Tooltip title={tooltipText} sx={{ cursor: "pointer" }}>
<Box>
<ServerStatusStyledBadge
inSidebar={false}
command={command || ""}
locked_at={locked_at || ""}
isOkay={isOkay}
isLoaded={successCheck}
/>
</Box>
</Tooltip>
</Button>
);
};
export default ServerStatusBadge;

View File

@ -0,0 +1,146 @@
import CheckIcon from "@mui/icons-material/Check";
import CloseIcon from "@mui/icons-material/Close";
import EngineeringIcon from "@mui/icons-material/Engineering";
import { Box, Stack, Typography, Paper, Link, Chip, Divider, ChipProps } from "@mui/material";
import { useStore } from "ra-core";
import CurrentlyRunningCommand from "./CurrentlyRunningCommand";
import { ServerProcessResponse, ServerStatusComponent, ServerStatusResponse } from "../../synapse/dataProvider";
const StatusChip = ({
isOkay,
size = "medium",
command,
}: {
isOkay: boolean;
size?: "small" | "medium";
command?: string;
}) => {
let label = "OK";
let icon = <CheckIcon />;
let color: ChipProps["color"] = "success";
if (!isOkay) {
label = "Error";
icon = <CloseIcon />;
color = "error";
}
if (command) {
label = command;
color = "warning";
icon = <EngineeringIcon />;
}
return <Chip icon={icon} label={label} color={color} variant="outlined" size={size} />;
};
const ServerComponentText = ({ text }: { text: string }) => {
return <Typography variant="body1" dangerouslySetInnerHTML={{ __html: text }} />;
};
const ServerStatusPage = () => {
const [serverStatus, _setServerStatus] = useStore<ServerStatusResponse>("serverStatus", {
ok: false,
success: false,
host: "",
results: [],
});
const [serverProcess, _setServerProcess] = useStore<ServerProcessResponse>("serverProcess", {
command: "",
locked_at: "",
});
const { command } = serverProcess;
const successCheck = serverStatus.success;
const isOkay = serverStatus.ok;
const host = serverStatus.host;
const results = serverStatus.results;
const groupedResults: Record<string, ServerStatusComponent[]> = {};
for (const result of results) {
if (!groupedResults[result.category]) {
groupedResults[result.category] = [];
}
groupedResults[result.category].push(result);
}
if (!successCheck) {
return (
<Paper elevation={3} sx={{ p: 3, mt: 3 }}>
<Stack direction="row" spacing={2} alignItems="center">
<Typography color="info">Fetching real-time server health... Just a moment!</Typography>
</Stack>
</Paper>
);
}
return (
<Stack spacing={3} mt={3}>
<Stack spacing={1} direction="row" alignItems="center">
<Box sx={{ display: "flex", alignItems: "center", gap: 1 }}>
<Typography variant="h4">Status:</Typography>
<StatusChip isOkay={isOkay} command={command} />
</Box>
<Typography variant="h5" color="primary" fontWeight="medium">
{host}
</Typography>
</Stack>
<CurrentlyRunningCommand />
<Typography variant="body1">
This is a{" "}
<Link href="https://etke.cc/services/monitoring/" target="_blank">
monitoring report
</Link>{" "}
of the server. If any of the checks below concern you, please check the{" "}
<Link
href="https://etke.cc/services/monitoring/#what-to-do-if-the-monitoring-report-shows-issues"
target="_blank"
>
suggested actions
</Link>
.
</Typography>
<Stack spacing={2} direction="row">
{Object.keys(groupedResults).map((category, _idx) => (
<Box key={`category_${category}`} sx={{ flex: 1 }}>
<Typography variant="h5" mb={1}>
{category}
</Typography>
<Paper elevation={2} sx={{ p: 3 }}>
<Stack spacing={1} divider={<Divider />}>
{groupedResults[category].map((result, idx) => (
<Box key={`${category}_${idx}`}>
<Stack spacing={2}>
<Box sx={{ display: "flex", alignItems: "center", gap: 1 }}>
<StatusChip isOkay={result.ok} size="small" />
{result.label.url ? (
<Link href={result.label.url} target="_blank" rel="noopener noreferrer">
<ServerComponentText text={result.label.text} />
</Link>
) : (
<ServerComponentText text={result.label.text} />
)}
</Box>
{result.reason && (
<Typography color="text.secondary" dangerouslySetInnerHTML={{ __html: result.reason }} />
)}
{!result.ok && result.help && (
<Link href={result.help} target="_blank" rel="noopener noreferrer" sx={{ mt: 1 }}>
Learn more
</Link>
)}
</Stack>
</Box>
))}
</Stack>
</Paper>
</Box>
))}
</Stack>
</Stack>
);
};
export default ServerStatusPage;

View File

@ -0,0 +1,29 @@
import { useState, useEffect } from "react";
import { useDataProvider } from "react-admin";
import { useAppContext } from "../../../Context";
import { ServerCommand } from "../../../synapse/dataProvider";
export const useServerCommands = () => {
const { etkeccAdmin } = useAppContext();
const [isLoading, setLoading] = useState(true);
const [serverCommands, setServerCommands] = useState<Record<string, ServerCommand>>({});
const dataProvider = useDataProvider();
useEffect(() => {
const fetchServerCommands = async () => {
const serverCommandsResponse = await dataProvider.getServerCommands(etkeccAdmin);
if (serverCommandsResponse) {
const serverCommands = serverCommandsResponse;
Object.keys(serverCommandsResponse).forEach((command: string) => {
serverCommands[command].additionalArgs = "";
});
setServerCommands(serverCommands);
}
setLoading(false);
};
fetchServerCommands();
}, [dataProvider, etkeccAdmin]);
return { isLoading, serverCommands, setServerCommands };
};

View File

@ -0,0 +1,182 @@
import ArrowBackIcon from "@mui/icons-material/ArrowBack";
import { Card, CardContent, CardHeader, Box, Alert, Typography, Link } from "@mui/material";
import { useQueryClient } from "@tanstack/react-query";
import { useState, useEffect } from "react";
import {
Form,
TextInput,
SaveButton,
useNotify,
useDataProvider,
Loading,
Button,
SelectInput,
TimeInput,
} from "react-admin";
import { useWatch } from "react-hook-form";
import { useParams, useNavigate } from "react-router-dom";
import RecurringDeleteButton from "./RecurringDeleteButton";
import { useAppContext } from "../../../../../Context";
import { RecurringCommand } from "../../../../../synapse/dataProvider";
import { useServerCommands } from "../../../hooks/useServerCommands";
import { useRecurringCommands } from "../../hooks/useRecurringCommands";
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
const transformCommandsToChoices = (commands: Record<string, any>) => {
return Object.entries(commands).map(([key, value]) => ({
id: key,
name: value.name,
description: value.description,
}));
};
const ArgumentsField = ({ serverCommands }) => {
const selectedCommand = useWatch({ name: "command" });
const showArgs = selectedCommand && serverCommands[selectedCommand]?.args === true;
if (!showArgs) return null;
return <TextInput required source="args" label="Arguments" fullWidth multiline />;
};
const RecurringCommandEdit = () => {
const { id } = useParams();
const navigate = useNavigate();
const notify = useNotify();
const dataProvider = useDataProvider();
const queryClient = useQueryClient();
const { etkeccAdmin } = useAppContext();
const [command, setCommand] = useState<RecurringCommand | undefined>(undefined);
const isCreating = typeof id === "undefined";
const [loading, setLoading] = useState(!isCreating);
const { data: recurringCommands, isLoading: isLoadingList } = useRecurringCommands();
const { serverCommands, isLoading: isLoadingServerCommands } = useServerCommands();
const pageTitle = isCreating ? "Create Recurring Command" : "Edit Recurring Command";
const commandChoices = transformCommandsToChoices(serverCommands);
const dayOfWeekChoices = [
{ id: "Monday", name: "Monday" },
{ id: "Tuesday", name: "Tuesday" },
{ id: "Wednesday", name: "Wednesday" },
{ id: "Thursday", name: "Thursday" },
{ id: "Friday", name: "Friday" },
{ id: "Saturday", name: "Saturday" },
{ id: "Sunday", name: "Sunday" },
];
useEffect(() => {
if (!isCreating && recurringCommands) {
const commandToEdit = recurringCommands.find(cmd => cmd.id === id);
if (commandToEdit) {
const timeValue = commandToEdit.time || "";
const timeParts = timeValue.split(" ");
const parsedCommand = {
...commandToEdit,
day_of_week: timeParts.length > 1 ? timeParts[0] : "Monday",
execution_time: timeParts.length > 1 ? timeParts[1] : timeValue,
};
setCommand(parsedCommand);
}
setLoading(false);
}
}, [id, recurringCommands, isCreating]);
const handleSubmit = async data => {
try {
// Format the time from the Date object to a string in HH:MM format
let formattedTime = "00:00";
if (data.execution_time instanceof Date) {
const hours = String(data.execution_time.getHours()).padStart(2, "0");
const minutes = String(data.execution_time.getMinutes()).padStart(2, "0");
formattedTime = `${hours}:${minutes}`;
} else if (typeof data.execution_time === "string") {
formattedTime = data.execution_time;
}
const submissionData = {
...data,
time: `${data.day_of_week} ${formattedTime}`,
};
delete submissionData.day_of_week;
delete submissionData.execution_time;
delete submissionData.scheduled_at;
// Only include args when it's required for the selected command
const selectedCommand = data.command;
if (!selectedCommand || !serverCommands[selectedCommand]?.args) {
delete submissionData.args;
}
if (isCreating) {
await dataProvider.createRecurringCommand(etkeccAdmin, submissionData);
notify("recurring_commands.action.create_success", { type: "success" });
} else {
await dataProvider.updateRecurringCommand(etkeccAdmin, {
...submissionData,
id: id,
});
notify("recurring_commands.action.update_success", { type: "success" });
}
// Invalidate scheduled commands queries
queryClient.invalidateQueries({ queryKey: ["scheduledCommands"] });
navigate("/server_actions");
} catch (error) {
console.error("Error saving recurring command:", error);
notify("recurring_commands.action.update_failure", { type: "error" });
}
};
if (loading || isLoadingList || isLoadingServerCommands) {
return <Loading />;
}
return (
<Box sx={{ mt: 2 }}>
<Button label="Back" onClick={() => navigate("/server_actions")} startIcon={<ArrowBackIcon />} sx={{ mb: 2 }} />
<Card>
<CardHeader title={pageTitle} />
<CardContent>
{command && (
<Alert severity="info">
<Typography variant="body1" sx={{ px: 2 }}>
You can find more details about the command{" "}
<Link href={`https://etke.cc/help/extras/scheduler/#${command.command}`} target="_blank">
here
</Link>
.
</Typography>
</Alert>
)}
<Form
defaultValues={command || undefined}
onSubmit={handleSubmit}
record={command || undefined}
warnWhenUnsavedChanges
>
<Box display="flex" flexDirection="column" gap={2}>
{!isCreating && <TextInput readOnly source="id" label="ID" fullWidth required />}
<SelectInput source="command" choices={commandChoices} label="Command" fullWidth required />
<ArgumentsField serverCommands={serverCommands} />
<SelectInput source="day_of_week" choices={dayOfWeekChoices} label="Day of Week" fullWidth required />
<TimeInput source="execution_time" label="Time (UTC)" fullWidth required />
<Box mt={2} display="flex" justifyContent="space-between">
<SaveButton label={isCreating ? "Create" : "Update"} />
{!isCreating && <RecurringDeleteButton />}
</Box>
</Box>
</Form>
</CardContent>
</Card>
</Box>
);
};
export default RecurringCommandEdit;

View File

@ -0,0 +1,63 @@
import AddIcon from "@mui/icons-material/Add";
import { Paper } from "@mui/material";
import { Loading, Button } from "react-admin";
import { DateField } from "react-admin";
import { Datagrid } from "react-admin";
import { ListContextProvider, TextField, TopToolbar, Identifier } from "react-admin";
import { ResourceContextProvider, useList } from "react-admin";
import { useNavigate } from "react-router-dom";
import { DATE_FORMAT } from "../../../../../utils/date";
import { useRecurringCommands } from "../../hooks/useRecurringCommands";
const ListActions = () => {
const navigate = useNavigate();
return (
<TopToolbar>
<Button label="Create" onClick={() => navigate("/server_actions/recurring/create")} startIcon={<AddIcon />} />
</TopToolbar>
);
};
const RecurringCommandsList = () => {
const { data, isLoading } = useRecurringCommands();
const listContext = useList({
resource: "recurring",
sort: { field: "scheduled_at", order: "DESC" },
perPage: 50,
data: data || [],
isLoading: isLoading,
});
if (isLoading) return <Loading />;
return (
<ResourceContextProvider value="recurring">
<ListContextProvider value={listContext}>
<ListActions />
<Paper>
<Datagrid
bulkActionButtons={false}
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
rowClick={(id: Identifier, resource: string, record: any) => {
if (!record) {
return "";
}
return `/server_actions/${resource}/${id}`;
}}
>
<TextField source="command" />
<TextField source="args" label="Arguments" />
<TextField source="time" label="Time (UTC)" />
<DateField options={DATE_FORMAT} showTime source="scheduled_at" label="Next run at (local time)" />
</Datagrid>
</Paper>
</ListContextProvider>
</ResourceContextProvider>
);
};
export default RecurringCommandsList;

View File

@ -0,0 +1,65 @@
import DeleteIcon from "@mui/icons-material/Delete";
import { useTheme } from "@mui/material/styles";
import { useState } from "react";
import { useNotify, useDataProvider, useRecordContext } from "react-admin";
import { Button, Confirm } from "react-admin";
import { useNavigate } from "react-router-dom";
import { useAppContext } from "../../../../../Context";
import { RecurringCommand } from "../../../../../synapse/dataProvider";
const RecurringDeleteButton = () => {
const record = useRecordContext() as RecurringCommand;
const { etkeccAdmin } = useAppContext();
const dataProvider = useDataProvider();
const notify = useNotify();
const theme = useTheme();
const navigate = useNavigate();
const [open, setOpen] = useState(false);
const [isDeleting, setIsDeleting] = useState(false);
const handleClick = e => {
e.stopPropagation();
setOpen(true);
};
const handleConfirm = async () => {
setIsDeleting(true);
try {
await dataProvider.deleteRecurringCommand(etkeccAdmin, record.id);
notify("recurring_commands.action.delete_success", { type: "success" });
navigate("/server_actions");
} catch (error) {
const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
notify(`Error: ${errorMessage}`, { type: "error" });
} finally {
setIsDeleting(false);
setOpen(false);
}
};
const handleCancel = () => {
setOpen(false);
};
return (
<>
<Button
sx={{ color: theme.palette.error.main }}
label="Delete"
onClick={handleClick}
disabled={isDeleting}
startIcon={<DeleteIcon />}
/>
<Confirm
isOpen={open}
title="Delete Recurring Command"
content={`Are you sure you want to delete the command: ${record?.command || ""}?`}
onConfirm={handleConfirm}
onClose={handleCancel}
/>
</>
);
};
export default RecurringDeleteButton;

View File

@ -0,0 +1,139 @@
import ArrowBackIcon from "@mui/icons-material/ArrowBack";
import { Card, CardContent, CardHeader, Box } from "@mui/material";
import { Typography, Link } from "@mui/material";
import { useState, useEffect } from "react";
import {
Form,
TextInput,
DateTimeInput,
SaveButton,
useNotify,
useDataProvider,
Loading,
Button,
SelectInput,
} from "react-admin";
import { useWatch } from "react-hook-form";
import { useParams, useNavigate } from "react-router-dom";
import ScheduleDeleteButton from "./ScheduledDeleteButton";
import { useAppContext } from "../../../../../Context";
import { ScheduledCommand } from "../../../../../synapse/dataProvider";
import { useServerCommands } from "../../../hooks/useServerCommands";
import { useScheduledCommands } from "../../hooks/useScheduledCommands";
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
const transformCommandsToChoices = (commands: Record<string, any>) => {
return Object.entries(commands).map(([key, value]) => ({
id: key,
name: value.name,
description: value.description,
}));
};
const ArgumentsField = ({ serverCommands }) => {
const selectedCommand = useWatch({ name: "command" });
const showArgs = selectedCommand && serverCommands[selectedCommand]?.args === true;
if (!showArgs) return null;
return <TextInput required source="args" label="Arguments" fullWidth multiline />;
};
const ScheduledCommandEdit = () => {
const { id } = useParams();
const navigate = useNavigate();
const notify = useNotify();
const dataProvider = useDataProvider();
const { etkeccAdmin } = useAppContext();
const [command, setCommand] = useState<ScheduledCommand | null>(null);
const isCreating = typeof id === "undefined";
const [loading, setLoading] = useState(!isCreating);
const { data: scheduledCommands, isLoading: isLoadingList } = useScheduledCommands();
const { serverCommands } = useServerCommands();
const pageTitle = isCreating ? "Create Scheduled Command" : "Edit Scheduled Command";
const commandChoices = transformCommandsToChoices(serverCommands);
useEffect(() => {
if (!isCreating && scheduledCommands) {
const commandToEdit = scheduledCommands.find(cmd => cmd.id === id);
if (commandToEdit) {
setCommand(commandToEdit);
}
setLoading(false);
}
}, [id, scheduledCommands, isCreating]);
const handleSubmit = async data => {
try {
data.scheduled_at = new Date(data.scheduled_at).toISOString();
if (isCreating) {
await dataProvider.createScheduledCommand(etkeccAdmin, data);
notify("scheduled_commands.action.create_success", { type: "success" });
} else {
await dataProvider.updateScheduledCommand(etkeccAdmin, {
...data,
id: id,
});
notify("scheduled_commands.action.update_success", { type: "success" });
}
navigate("/server_actions");
} catch (error) {
console.log("Error saving scheduled command:", error);
notify("scheduled_commands.action.update_failure", { type: "error" });
}
};
if (loading || isLoadingList) {
return <Loading />;
}
return (
<Box sx={{ mt: 2 }}>
<Button label="Back" onClick={() => navigate("/server_actions")} startIcon={<ArrowBackIcon />} sx={{ mb: 2 }} />
<Card>
<CardHeader title={pageTitle} />
{command && (
<Typography variant="body1" sx={{ px: 2 }}>
You can find more details about the command{" "}
<Link href={`https://etke.cc/help/extras/scheduler/#${command.command}`} target="_blank">
here
</Link>
.
</Typography>
)}
<CardContent>
<Form
defaultValues={command || undefined}
onSubmit={handleSubmit}
record={command || undefined}
warnWhenUnsavedChanges
>
<Box display="flex" flexDirection="column" gap={2}>
{command && <TextInput readOnly source="id" label="ID" fullWidth required />}
<SelectInput
readOnly={!isCreating}
source="command"
choices={commandChoices}
label="Command"
fullWidth
required
/>
<ArgumentsField serverCommands={serverCommands} />
<DateTimeInput source="scheduled_at" label="Scheduled at" fullWidth required />
<Box mt={2} display="flex" justifyContent="space-between">
<SaveButton label={isCreating ? "Create" : "Update"} />
{!isCreating && <ScheduleDeleteButton />}
</Box>
</Box>
</Form>
</CardContent>
</Card>
</Box>
);
};
export default ScheduledCommandEdit;

View File

@ -0,0 +1,86 @@
import ArrowBackIcon from "@mui/icons-material/ArrowBack";
import { Alert, Box, Card, CardContent, CardHeader, Typography, Link } from "@mui/material";
import { useState, useEffect } from "react";
import {
Loading,
Button,
SimpleShowLayout,
TextField,
BooleanField,
DateField,
RecordContextProvider,
} from "react-admin";
import { useParams, useNavigate } from "react-router-dom";
import ScheduledDeleteButton from "./ScheduledDeleteButton";
import { ScheduledCommand } from "../../../../../synapse/dataProvider";
import { useScheduledCommands } from "../../hooks/useScheduledCommands";
const ScheduledCommandShow = () => {
const { id } = useParams();
const navigate = useNavigate();
const [command, setCommand] = useState<ScheduledCommand | null>(null);
const [loading, setLoading] = useState(true);
const { data: scheduledCommands, isLoading: isLoadingList } = useScheduledCommands();
useEffect(() => {
if (scheduledCommands) {
const commandToShow = scheduledCommands.find(cmd => cmd.id === id);
if (commandToShow) {
setCommand(commandToShow);
}
setLoading(false);
}
}, [id, scheduledCommands]);
if (loading || isLoadingList) {
return <Loading />;
}
if (!command) {
return null;
}
return (
<Box sx={{ mt: 2 }}>
<Button label="Back" onClick={() => navigate("/server_actions")} startIcon={<ArrowBackIcon />} sx={{ mb: 2 }} />
<RecordContextProvider value={command}>
<Card>
<CardHeader title="Scheduled Command Details" />
<CardContent>
{command && (
<Alert severity="info">
<Typography variant="body1" sx={{ px: 2 }}>
You can find more details about the command{" "}
<Link href={`https://etke.cc/help/extras/scheduler/#${command.command}`} target="_blank">
here
</Link>
.
</Typography>
</Alert>
)}
<SimpleShowLayout>
<TextField source="id" label="ID" />
<TextField source="command" label="Command" />
{command.args && <TextField source="args" label="Arguments" />}
<BooleanField source="is_recurring" label="Is recurring" />
<DateField source="scheduled_at" label="Scheduled at" showTime />
</SimpleShowLayout>
{command.is_recurring && (
<Alert severity="warning">
Scheduled commands created from a recurring one are not editable as they will be regenerated
automatically. Please edit the recurring command instead.
</Alert>
)}
</CardContent>
</Card>
<Box display="flex" justifyContent="flex-end" mt={2}>
<ScheduledDeleteButton />
</Box>
</RecordContextProvider>
</Box>
);
};
export default ScheduledCommandShow;

View File

@ -0,0 +1,71 @@
import AddIcon from "@mui/icons-material/Add";
import { Paper } from "@mui/material";
import { Loading, Button } from "react-admin";
import { ResourceContextProvider, useList } from "react-admin";
import { ListContextProvider, TextField } from "react-admin";
import { Datagrid } from "react-admin";
import { BooleanField, DateField, TopToolbar } from "react-admin";
import { Identifier } from "react-admin";
import { useNavigate } from "react-router-dom";
import { DATE_FORMAT } from "../../../../../utils/date";
import { useScheduledCommands } from "../../hooks/useScheduledCommands";
const ListActions = () => {
const navigate = useNavigate();
const handleCreate = () => {
navigate("/server_actions/scheduled/create");
};
return (
<TopToolbar>
<Button label="Create" onClick={handleCreate} startIcon={<AddIcon />} />
</TopToolbar>
);
};
const ScheduledCommandsList = () => {
const { data, isLoading } = useScheduledCommands();
const listContext = useList({
resource: "scheduled",
sort: { field: "scheduled_at", order: "DESC" },
perPage: 50,
data: data || [],
isLoading: isLoading,
});
if (isLoading) return <Loading />;
return (
<ResourceContextProvider value="scheduled">
<ListContextProvider value={listContext}>
<ListActions />
<Paper>
<Datagrid
bulkActionButtons={false}
/* eslint-disable-next-line @typescript-eslint/no-explicit-any */
rowClick={(id: Identifier, resource: string, record: any) => {
if (!record) {
return "";
}
if (record.is_recurring) {
return `/server_actions/${resource}/${id}/show`;
}
return `/server_actions/${resource}/${id}`;
}}
>
<TextField source="command" />
<TextField source="args" label="Arguments" />
<BooleanField source="is_recurring" label="Is recurring?" />
<DateField options={DATE_FORMAT} showTime source="scheduled_at" label="Run at (local time)" />
</Datagrid>
</Paper>
</ListContextProvider>
</ResourceContextProvider>
);
};
export default ScheduledCommandsList;

View File

@ -0,0 +1,65 @@
import DeleteIcon from "@mui/icons-material/Delete";
import { useTheme } from "@mui/material/styles";
import { useState } from "react";
import { useNotify, useDataProvider, useRecordContext } from "react-admin";
import { Button, Confirm } from "react-admin";
import { useNavigate } from "react-router-dom";
import { useAppContext } from "../../../../../Context";
import { ScheduledCommand } from "../../../../../synapse/dataProvider";
const ScheduledDeleteButton = () => {
const record = useRecordContext() as ScheduledCommand;
const { etkeccAdmin } = useAppContext();
const dataProvider = useDataProvider();
const notify = useNotify();
const theme = useTheme();
const navigate = useNavigate();
const [open, setOpen] = useState(false);
const [isDeleting, setIsDeleting] = useState(false);
const handleClick = e => {
e.stopPropagation();
setOpen(true);
};
const handleConfirm = async () => {
setIsDeleting(true);
try {
await dataProvider.deleteScheduledCommand(etkeccAdmin, record.id);
notify("scheduled_commands.action.delete_success", { type: "success" });
navigate("/server_actions");
} catch (error) {
const errorMessage = error instanceof Error ? error.message : "Unknown error occurred";
notify(`Error: ${errorMessage}`, { type: "error" });
} finally {
setIsDeleting(false);
setOpen(false);
}
};
const handleCancel = () => {
setOpen(false);
};
return (
<>
<Button
sx={{ color: theme.palette.error.main }}
label="Delete"
onClick={handleClick}
disabled={isDeleting}
startIcon={<DeleteIcon />}
/>
<Confirm
isOpen={open}
title="Delete Scheduled Command"
content={`Are you sure you want to delete the command: ${record?.command || ""}?`}
onConfirm={handleConfirm}
onClose={handleCancel}
/>
</>
);
};
export default ScheduledDeleteButton;

View File

@ -0,0 +1,15 @@
import { useQuery } from "@tanstack/react-query";
import { useDataProvider } from "react-admin";
import { useAppContext } from "../../../../Context";
export const useRecurringCommands = () => {
const { etkeccAdmin } = useAppContext();
const dataProvider = useDataProvider();
const { data, isLoading, error } = useQuery({
queryKey: ["recurringCommands"],
queryFn: () => dataProvider.getRecurringCommands(etkeccAdmin),
});
return { data, isLoading, error };
};

View File

@ -0,0 +1,15 @@
import { useQuery } from "@tanstack/react-query";
import { useDataProvider } from "react-admin";
import { useAppContext } from "../../../../Context";
export const useScheduledCommands = () => {
const { etkeccAdmin } = useAppContext();
const dataProvider = useDataProvider();
const { data, isLoading, error } = useQuery({
queryKey: ["scheduledCommands"],
queryFn: () => dataProvider.getScheduledCommands(etkeccAdmin),
});
return { data, isLoading, error };
};

View File

@ -1,15 +1,17 @@
import { get } from "lodash";
import { useState } from "react";
import BlockIcon from "@mui/icons-material/Block";
import IconCancel from "@mui/icons-material/Cancel";
import ClearIcon from "@mui/icons-material/Clear";
import DeleteSweepIcon from "@mui/icons-material/DeleteSweep";
import DownloadIcon from "@mui/icons-material/Download";
import DownloadingIcon from "@mui/icons-material/Downloading";
import FileOpenIcon from "@mui/icons-material/FileOpen";
import LockIcon from "@mui/icons-material/Lock";
import LockOpenIcon from "@mui/icons-material/LockOpen";
import { Box, Dialog, DialogContent, DialogContentText, DialogTitle, Tooltip } from "@mui/material";
import { alpha, useTheme } from "@mui/material/styles";
import { useMutation } from "@tanstack/react-query";
import { get } from "lodash";
import { useState } from "react";
import {
BooleanInput,
Button,
@ -28,13 +30,11 @@ import {
useRefresh,
useTranslate,
} from "react-admin";
import { useMutation } from "@tanstack/react-query";
import { Link } from "react-router-dom";
import { dateParser } from "./date";
import { DeleteMediaParams, SynapseDataProvider } from "../synapse/dataProvider";
import { getMediaUrl } from "../synapse/synapse";
import storage from "../storage";
import { dateParser } from "../utils/date";
import decodeURLComponent from "../utils/decodeURLComponent";
import { fetchAuthenticatedMedia } from "../utils/fetchMedia";
const DeleteMediaDialog = ({ open, onClose, onSubmit }) => {
const translate = useTranslate();
@ -54,24 +54,9 @@ const DeleteMediaDialog = ({ open, onClose, onSubmit }) => {
<DialogContent>
<DialogContentText>{translate("delete_media.helper.send")}</DialogContentText>
<SimpleForm toolbar={<DeleteMediaToolbar />} onSubmit={onSubmit}>
<DateTimeInput
source="before_ts"
label="delete_media.fields.before_ts"
defaultValue={0}
parse={dateParser}
/>
<NumberInput
source="size_gt"
label="delete_media.fields.size_gt"
defaultValue={0}
min={0}
step={1024}
/>
<BooleanInput
source="keep_profiles"
label="delete_media.fields.keep_profiles"
defaultValue={true}
/>
<DateTimeInput source="before_ts" label="delete_media.fields.before_ts" defaultValue={0} parse={dateParser} />
<NumberInput source="size_gt" label="delete_media.fields.size_gt" defaultValue={0} min={0} step={1024} />
<BooleanInput source="keep_profiles" label="delete_media.fields.keep_profiles" defaultValue={true} />
</SimpleForm>
</DialogContent>
</Dialog>
@ -124,6 +109,79 @@ export const DeleteMediaButton = (props: ButtonProps) => {
);
};
const PurgeRemoteMediaDialog = ({ open, onClose, onSubmit }) => {
const translate = useTranslate();
const PurgeRemoteMediaToolbar = (props: ToolbarProps) => (
<Toolbar {...props}>
<SaveButton label="purge_remote_media.action.send" icon={<DeleteSweepIcon />} />
<Button label="ra.action.cancel" onClick={onClose}>
<IconCancel />
</Button>
</Toolbar>
);
return (
<Dialog open={open} onClose={onClose}>
<DialogTitle>{translate("purge_remote_media.action.send")}</DialogTitle>
<DialogContent>
<DialogContentText>{translate("purge_remote_media.helper.send")}</DialogContentText>
<SimpleForm toolbar={<PurgeRemoteMediaToolbar />} onSubmit={onSubmit}>
<DateTimeInput
source="before_ts"
label="purge_remote_media.fields.before_ts"
defaultValue={0}
parse={dateParser}
/>
</SimpleForm>
</DialogContent>
</Dialog>
);
};
export const PurgeRemoteMediaButton = (props: ButtonProps) => {
const [open, setOpen] = useState(false);
const notify = useNotify();
const dataProvider = useDataProvider<SynapseDataProvider>();
const { mutate: purgeRemoteMedia, isPending } = useMutation({
mutationFn: (values: DeleteMediaParams) => dataProvider.purgeRemoteMedia(values),
onSuccess: () => {
notify("purge_remote_media.action.send_success");
closeDialog();
},
onError: () => {
notify("purge_remote_media.action.send_failure", {
type: "error",
});
},
});
const openDialog = () => setOpen(true);
const closeDialog = () => setOpen(false);
return (
<>
<Button
{...props}
label="purge_remote_media.action.send"
onClick={openDialog}
disabled={isPending}
sx={{
"&:hover": {
// Reset on mouse devices
"@media (hover: none)": {
backgroundColor: "transparent",
},
},
}}
>
<DeleteSweepIcon />
</Button>
<PurgeRemoteMediaDialog open={open} onClose={closeDialog} onSubmit={purgeRemoteMedia} />
</>
);
};
export const ProtectMediaButton = (props: ButtonProps) => {
const record = useRecordContext();
const translate = useTranslate();
@ -311,48 +369,129 @@ export const QuarantineMediaButton = (props: ButtonProps) => {
);
};
export const ViewMediaButton = ({ media_id, label }) => {
export const ViewMediaButton = ({ mxcURL, label, uploadName, mimetype }) => {
const translate = useTranslate();
const url = getMediaUrl(media_id);
const [loading, setLoading] = useState(false);
const notify = useNotify();
const isImage = mimetype && mimetype.startsWith("image/");
const openFileInNewTab = (blobURL: string) => {
const anchorElement = document.createElement("a");
anchorElement.href = blobURL;
anchorElement.target = "_blank";
document.body.appendChild(anchorElement);
anchorElement.click();
document.body.removeChild(anchorElement);
setTimeout(() => URL.revokeObjectURL(blobURL), 10);
};
const downloadFile = async (blobURL: string) => {
console.log("downloadFile", blobURL, uploadName);
const anchorElement = document.createElement("a");
anchorElement.href = blobURL;
anchorElement.download = uploadName;
document.body.appendChild(anchorElement);
anchorElement.click();
document.body.removeChild(anchorElement);
setTimeout(() => URL.revokeObjectURL(blobURL), 10);
};
const handleFile = async (preview: boolean) => {
setLoading(true);
const response = await fetchAuthenticatedMedia(mxcURL, "original");
if (response.ok) {
const blob = await response.blob();
const blobURL = URL.createObjectURL(blob);
if (preview) {
openFileInNewTab(blobURL);
} else {
downloadFile(blobURL);
}
} else {
const body = await response.json();
notify("resources.room_media.action.error", {
messageArgs: {
errcode: body.errcode,
errstatus: response.status,
error: body.error,
},
type: "error",
});
}
setLoading(false);
};
return (
<Box style={{ whiteSpace: "pre" }}>
<Tooltip title={translate("resources.users_media.action.open")}>
<span>
<Button
component={Link}
to={url}
target="_blank"
rel="noopener"
style={{ minWidth: 0, paddingLeft: 0, paddingRight: 0 }}
>
<FileOpenIcon />
</Button>
</span>
</Tooltip>
{label}
</Box>
<>
<Box display="flex" alignItems="center">
<Tooltip title={translate("resources.users_media.action.open")}>
<span>
{isImage && (
<Button
disabled={loading}
onClick={() => handleFile(true)}
style={{ minWidth: 0, padding: 0, marginRight: 8 }}
>
{loading ? <DownloadingIcon /> : <FileOpenIcon />}
</Button>
)}
</span>
</Tooltip>
<Button
disabled={loading}
onClick={() => handleFile(false)}
style={{ minWidth: 0, padding: 0, marginRight: 8 }}
>
{loading ? <DownloadingIcon /> : <DownloadIcon />}
</Button>
<span>{label}</span>
</Box>
</>
);
};
export const MediaIDField = ({ source }) => {
const homeserver = storage.getItem("home_server");
const record = useRecordContext();
if (!record) return null;
if (!record) {
return null;
}
const homeserver = localStorage.getItem("home_server");
const src = get(record, source)?.toString();
if (!src) return null;
const mediaID = get(record, source)?.toString();
if (!mediaID) {
return null;
}
return <ViewMediaButton media_id={`${homeserver}/${src}`} label={src} />;
let uploadName = mediaID;
if (get(record, "upload_name")) {
uploadName = decodeURLComponent(get(record, "upload_name")?.toString());
}
let mxcURL = mediaID;
if (!mediaID.startsWith(`mxc://${homeserver}`)) {
// this is user's media, where mediaID doesn't have the mxc://home_server/ prefix as it has in the rooms
mxcURL = `mxc://${homeserver}/${mediaID}`;
}
return <ViewMediaButton mxcURL={mxcURL} label={mediaID} uploadName={uploadName} mimetype={record.media_type} />;
};
export const MXCField = ({ source }) => {
export const ReportMediaContent = ({ source }) => {
const record = useRecordContext();
if (!record) return null;
if (!record) {
return null;
}
const src = get(record, source)?.toString();
if (!src) return null;
const mxcURL = get(record, source)?.toString();
if (!mxcURL) {
return null;
}
const media_id = src.replace("mxc://", "");
let uploadName = "";
if (get(record, "event_json.content.body")) {
uploadName = decodeURLComponent(get(record, "event_json.content.body")?.toString());
}
return <ViewMediaButton media_id={media_id} label={src} />;
return <ViewMediaButton mxcURL={mxcURL} label={mxcURL} uploadName={uploadName} mimetype={record.media_type} />;
};

View File

@ -0,0 +1,50 @@
import { NativeSelect, Paper } from "@mui/material";
import { CardContent, CardHeader, Container } from "@mui/material";
import { useTranslate } from "ra-core";
import { ChangeEventHandler } from "react";
import { ImportResult, ParsedStats, Progress } from "./types";
const TranslatableOption = ({ value, text }: { value: string; text: string }) => {
const translate = useTranslate();
return <option value={value}>{translate(text)}</option>;
};
const ConflictModeCard = ({
stats,
importResults,
onConflictModeChanged,
conflictMode,
progress,
}: {
stats: ParsedStats | null;
importResults: ImportResult | null;
onConflictModeChanged: ChangeEventHandler<HTMLSelectElement>;
conflictMode: string;
progress: Progress;
}) => {
const translate = useTranslate();
if (!stats || importResults) {
return null;
}
return (
<Container sx={{ mb: 3 }}>
<Paper elevation={1}>
<CardHeader
title={translate("import_users.cards.conflicts.header")}
sx={{ borderBottom: 1, borderColor: "divider" }}
/>
<CardContent>
<NativeSelect onChange={onConflictModeChanged} value={conflictMode} disabled={progress !== null}>
<TranslatableOption value="stop" text="import_users.cards.conflicts.mode.stop" />
<TranslatableOption value="skip" text="import_users.cards.conflicts.mode.skip" />
</NativeSelect>
</CardContent>
</Paper>
</Container>
);
};
export default ConflictModeCard;

View File

@ -0,0 +1,36 @@
import { Container, Paper, CardHeader, CardContent, Stack, Typography } from "@mui/material";
import { useTranslate } from "ra-core";
const ErrorsCard = ({ errors }: { errors: string[] }) => {
const translate = useTranslate();
if (errors.length === 0) {
return null;
}
return (
<Container sx={{ mb: 3 }}>
<Paper elevation={1}>
<CardHeader
title={translate("import_users.error.error")}
sx={{
borderBottom: 1,
borderColor: "error.main",
color: "error.main",
}}
/>
<CardContent>
<Stack spacing={1}>
{errors.map((e, idx) => (
<Typography key={idx} color="error">
{e}
</Typography>
))}
</Stack>
</CardContent>
</Paper>
</Container>
);
};
export default ErrorsCard;

View File

@ -0,0 +1,95 @@
import ArrowBackIcon from "@mui/icons-material/ArrowBack";
import DownloadIcon from "@mui/icons-material/Download";
import {
Alert,
Box,
CardContent,
CardHeader,
Container,
List,
ListItem,
ListItemText,
Paper,
Stack,
Typography,
} from "@mui/material";
import { Button, Link, useTranslate } from "react-admin";
import { ImportResult } from "./types";
const ResultsCard = ({
importResults,
downloadSkippedRecords,
}: {
importResults: ImportResult | null;
downloadSkippedRecords: () => void;
}) => {
const translate = useTranslate();
if (!importResults) {
return null;
}
return (
<Container>
<Paper>
<CardHeader
title={translate("import_users.cards.results.header")}
pb={0}
sx={{
borderBottom: 1,
}}
/>
<CardContent>
<Stack spacing={2}>
<Typography key="total" color="text.primary">
{translate("import_users.cards.results.total", importResults.totalRecordCount)}
</Typography>
<Typography key="successful" color="success.main">
{translate("import_users.cards.results.successful", importResults.succeededRecords.length)}
</Typography>
<List dense>
{importResults.succeededRecords.map(record => (
<ListItem key={record.id}>
<ListItemText primary={record.displayname} />
</ListItem>
))}
</List>
{importResults.skippedRecords.length > 0 && (
<Box>
<Typography key="skipped" color="warning.main">
{translate("import_users.cards.results.skipped", importResults.skippedRecords.length)}
</Typography>
<Button
variant="outlined"
startIcon={<DownloadIcon />}
onClick={downloadSkippedRecords}
sx={{ mt: 2 }}
label={translate("import_users.cards.results.download_skipped")}
></Button>
</Box>
)}
{importResults.erroredRecords.length > 0 && (
<Typography key="errored" color="error.main">
{translate("import_users.cards.results.skipped", importResults.erroredRecords.length)}
</Typography>
)}
{importResults.wasDryRun && (
<Alert severity="warning" key="simulated">
{translate("import_users.cards.results.simulated_only")}
</Alert>
)}
</Stack>
</CardContent>
</Paper>
<Box sx={{ mt: 2 }}>
<Link to="/users">
<Button variant="outlined" startIcon={<ArrowBackIcon />} label={translate("ra.action.back")} />
</Link>
</Box>
</Container>
);
};
export default ResultsCard;

View File

@ -0,0 +1,50 @@
import { Button, Checkbox, Paper, Container } from "@mui/material";
import { CardActions, FormControlLabel } from "@mui/material";
import { useTranslate } from "ra-core";
import { ChangeEventHandler } from "react";
import { Progress, ImportLine, ImportResult } from "./types";
const StartImportCard = ({
csvData,
importResults,
progress,
dryRun,
onDryRunModeChanged,
runImport,
}: {
csvData: ImportLine[];
importResults: ImportResult | null;
progress: Progress;
dryRun: boolean;
onDryRunModeChanged: ChangeEventHandler<HTMLInputElement>;
runImport: () => void;
}) => {
const translate = useTranslate();
if (!csvData || csvData.length === 0 || importResults) {
return null;
}
return (
<Container>
<Paper>
<CardActions>
<FormControlLabel
control={<Checkbox checked={dryRun} onChange={onDryRunModeChanged} disabled={progress !== null} />}
label={translate("import_users.cards.startImport.simulate_only")}
/>
<Button variant="contained" size="large" onClick={runImport} disabled={progress !== null}>
{translate("import_users.cards.startImport.run_import")}
</Button>
{progress !== null ? (
<div>
{progress.done} of {progress.limit} done
</div>
) : null}
</CardActions>
</Paper>
</Container>
);
};
export default StartImportCard;

View File

@ -0,0 +1,100 @@
import { Card, Paper, Stack, CardContent, CardHeader, Container, Typography } from "@mui/material";
import { NativeSelect } from "@mui/material";
import { FormControlLabel } from "@mui/material";
import { Checkbox } from "@mui/material";
import { useTranslate } from "ra-core";
import { ChangeEventHandler } from "react";
import { ImportResult, ParsedStats, Progress } from "./types";
const StatsCard = ({
stats,
progress,
importResults,
useridMode,
passwordMode,
onUseridModeChanged,
onPasswordModeChange,
}: {
stats: ParsedStats | null;
progress: Progress;
importResults: ImportResult | null;
useridMode: string;
passwordMode: boolean;
onUseridModeChanged: ChangeEventHandler<HTMLSelectElement>;
onPasswordModeChange: ChangeEventHandler<HTMLInputElement>;
}) => {
const translate = useTranslate();
if (!stats) {
return null;
}
if (importResults) {
return null;
}
return (
<>
<Container sx={{ mb: 3 }}>
<Paper>
<Card>
<CardHeader
title={translate("import_users.cards.importstats.header")}
sx={{ borderBottom: 1, borderColor: "divider" }}
/>
<CardContent>
<Stack spacing={1}>
<Typography>{translate("import_users.cards.importstats.users_total", stats.total)}</Typography>
<Typography>{translate("import_users.cards.importstats.guest_count", stats.is_guest)}</Typography>
<Typography>{translate("import_users.cards.importstats.admin_count", stats.admin)}</Typography>
</Stack>
</CardContent>
<CardHeader
title={translate("import_users.cards.ids.header")}
sx={{ borderBottom: 1, borderColor: "divider" }}
/>
<CardContent>
<Stack spacing={2}>
<Typography>
{stats.id === stats.total
? translate("import_users.cards.ids.all_ids_present")
: translate("import_users.cards.ids.count_ids_present", stats.id)}
</Typography>
{stats.id > 0 && (
<NativeSelect onChange={onUseridModeChanged} value={useridMode} disabled={progress !== null}>
<option value={"ignore"}>{translate("import_users.cards.ids.mode.ignore")}</option>
<option value={"update"}>{translate("import_users.cards.ids.mode.update")}</option>
</NativeSelect>
)}
</Stack>
</CardContent>
<CardHeader
title={translate("import_users.cards.passwords.header")}
sx={{ borderBottom: 1, borderColor: "divider" }}
/>
<CardContent>
<Stack spacing={1}>
<Typography>
{stats.password === stats.total
? translate("import_users.cards.passwords.all_passwords_present")
: translate("import_users.cards.passwords.count_passwords_present", stats.password)}
</Typography>
{stats.password > 0 && (
<FormControlLabel
control={
<Checkbox checked={passwordMode} disabled={progress !== null} onChange={onPasswordModeChange} />
}
label={translate("import_users.cards.passwords.use_passwords")}
/>
)}
</Stack>
</CardContent>
</Card>
</Paper>
</Container>
</>
);
};
export default StatsCard;

View File

@ -0,0 +1,44 @@
import { CardHeader, CardContent, Container, Link, Stack, Typography, Paper } from "@mui/material";
import { useTranslate } from "ra-core";
import { ChangeEventHandler } from "react";
import { ImportResult, Progress } from "./types";
const UploadCard = ({
importResults,
onFileChange,
progress,
}: {
importResults: ImportResult | null;
onFileChange: ChangeEventHandler<HTMLInputElement>;
progress: Progress;
}) => {
const translate = useTranslate();
if (importResults) {
return null;
}
return (
<Container sx={{ mb: 3 }}>
<Paper elevation={1}>
<CardHeader
title={translate("import_users.cards.upload.header")}
sx={{ borderBottom: 1, borderColor: "divider" }}
/>
<CardContent>
<Stack spacing={2}>
<Typography>
{translate("import_users.cards.upload.explanation")}
<Link href="./data/example.csv" sx={{ ml: 1 }}>
example.csv
</Link>
</Typography>
<input type="file" onChange={onFileChange} disabled={progress !== null} />
</Stack>
</CardContent>
</Paper>
</Container>
);
};
export default UploadCard;

View File

@ -0,0 +1,69 @@
import { Stack } from "@mui/material";
import { useTranslate } from "ra-core";
import { Title } from "react-admin";
import ConflictModeCard from "./ConflictModeCard";
import ErrorsCard from "./ErrorsCard";
import ResultsCard from "./ResultsCard";
import StartImportCard from "./StartImportCard";
import StatsCard from "./StatsCard";
import UploadCard from "./UploadCard";
import useImportFile from "./useImportFile";
const UserImport = () => {
const {
csvData,
dryRun,
importResults,
progress,
errors,
stats,
conflictMode,
passwordMode,
useridMode,
onFileChange,
onDryRunModeChanged,
runImport,
onConflictModeChanged,
onPasswordModeChange,
onUseridModeChanged,
downloadSkippedRecords,
} = useImportFile();
const translate = useTranslate();
return (
<Stack spacing={3} mt={3} direction="column">
<Title defaultTitle={translate("import_users.title")} />
<UploadCard importResults={importResults} onFileChange={onFileChange} progress={progress} />
<ErrorsCard errors={errors} />
<ConflictModeCard
stats={stats}
importResults={importResults}
conflictMode={conflictMode}
onConflictModeChanged={onConflictModeChanged}
progress={progress}
/>
<StatsCard
stats={stats}
progress={progress}
importResults={importResults}
passwordMode={passwordMode}
useridMode={useridMode}
onPasswordModeChange={onPasswordModeChange}
onUseridModeChanged={onUseridModeChanged}
/>
<StartImportCard
csvData={csvData}
importResults={importResults}
progress={progress}
dryRun={dryRun}
onDryRunModeChanged={onDryRunModeChanged}
runImport={runImport}
/>
<ResultsCard importResults={importResults} downloadSkippedRecords={downloadSkippedRecords} />
</Stack>
);
};
export default UserImport;

View File

@ -0,0 +1,47 @@
import { RaRecord } from "react-admin";
export interface ImportLine {
id: string;
displayname: string;
user_type?: string;
name?: string;
deactivated?: boolean;
is_guest?: boolean;
admin?: boolean;
is_admin?: boolean;
password?: string;
avatar_url?: string;
}
export interface ParsedStats {
user_types: Record<string, number>;
is_guest: number;
admin: number;
deactivated: number;
password: number;
avatar_url: number;
id: number;
total: number;
}
export interface ChangeStats {
total: number;
id: number;
is_guest: number;
admin: number;
password: number;
}
export type Progress = {
done: number;
limit: number;
} | null;
export interface ImportResult {
skippedRecords: RaRecord[];
erroredRecords: RaRecord[];
succeededRecords: RaRecord[];
totalRecordCount: number;
changeStats: ChangeStats;
wasDryRun: boolean;
}

View File

@ -0,0 +1,377 @@
import { parse as parseCsv, unparse as unparseCsv, ParseResult } from "papaparse";
import { ChangeEvent, useState } from "react";
import { useTranslate, useNotify, HttpError } from "react-admin";
import { ImportLine, ParsedStats, Progress, ImportResult, ChangeStats } from "./types";
import dataProvider from "../../synapse/dataProvider";
import { returnMXID } from "../../utils/mxid";
import { generateRandomMXID } from "../../utils/mxid";
import { generateRandomPassword } from "../../utils/password";
const LOGGING = true;
const EXPECTED_FIELDS = ["id", "displayname"].sort();
const useImportFile = () => {
const [csvData, setCsvData] = useState<ImportLine[]>([]);
const [errors, setErrors] = useState<string[]>([]);
const [stats, setStats] = useState<ParsedStats | null>(null);
const [dryRun, setDryRun] = useState(true);
const [progress, setProgress] = useState<Progress>(null);
const [importResults, setImportResults] = useState<ImportResult | null>(null);
const [skippedRecords, setSkippedRecords] = useState<string>("");
const [conflictMode, setConflictMode] = useState<"stop" | "skip">("stop");
const [passwordMode, setPasswordMode] = useState(true);
const [useridMode, setUseridMode] = useState<"update" | "ignore">("update");
const translate = useTranslate();
const notify = useNotify();
const onFileChange = async (e: ChangeEvent<HTMLInputElement>) => {
if (progress !== null) return;
setCsvData([]);
setErrors([]);
setStats(null);
setImportResults(null);
const file = e.target.files ? e.target.files[0] : null;
if (!file) return;
/* Let's refuse some unreasonably big files instead of freezing
* up the browser */
if (file.size > 100000000) {
const message = translate("import_users.errors.unreasonably_big", {
size: (file.size / (1024 * 1024)).toFixed(2),
});
notify(message);
setErrors([message]);
return;
}
try {
parseCsv<ImportLine>(file, {
header: true,
skipEmptyLines: true /* especially for a final EOL in the csv file */,
complete: result => {
if (result.errors) {
setErrors(result.errors.map(e => e.toString()));
}
/* Papaparse is very lenient, we may be able to salvage
* the data in the file. */
verifyCsv(result);
},
});
} catch {
setErrors(["Unknown error"]);
return null;
}
};
const verifyCsv = ({ data, meta, errors }: ParseResult<ImportLine>) => {
/* First, verify the presence of required fields */
meta.fields = meta.fields?.map(f => f.trim().toLowerCase());
const missingFields = EXPECTED_FIELDS.filter(eF => !meta.fields?.find(mF => eF === mF));
if (missingFields.length > 0) {
setErrors([translate("import_users.error.required_field", { field: missingFields[0] })]);
return false;
}
/* Collect some stats to prevent sneaky csv files from adding admin
users or something.
*/
const stats: ParsedStats = {
user_types: { default: 0 },
is_guest: 0,
admin: 0,
deactivated: 0,
password: 0,
avatar_url: 0,
id: 0,
total: data.length,
};
const errorMessages = errors.map(e => e.message);
// sanitize the data first
data = data.map(line => {
const newLine = {} as ImportLine;
for (const [key, value] of Object.entries(line)) {
newLine[key.trim().toLowerCase()] = value;
}
return newLine;
});
// process the data
data.forEach((line, idx) => {
if (line.user_type === undefined || line.user_type === "") {
stats.user_types.default++;
} else {
stats.user_types[line.user_type] += 1;
}
/* XXX correct the csv export that react-admin offers for the users
* resource so it gives sensible field names and doesn't duplicate
* id as "name"?
*/
if (meta.fields?.includes("name")) {
delete line.name;
}
if (meta.fields?.includes("user_type")) {
delete line.user_type;
}
if (meta.fields?.includes("is_admin")) {
delete line.is_admin;
}
["is_guest", "admin", "deactivated"].forEach(f => {
if (line[f] === "true") {
stats[f]++;
line[f] = true; // we need true booleans instead of strings
} else {
if (line[f] !== "false" && line[f] !== "") {
console.log("invalid value", line[f], "for field " + f + " in row " + idx);
errorMessages.push(
translate("import_users.error.invalid_value", {
field: f,
row: idx,
})
);
}
line[f] = false; // default values to false
}
});
if (line.password !== undefined && line.password !== "") {
stats.password++;
}
if (line.avatar_url !== undefined && line.avatar_url !== "") {
stats.avatar_url++;
}
if (line.id !== undefined && line.id !== "") {
stats.id++;
}
});
if (errorMessages.length > 0) {
setErrors(errorMessages);
return false;
}
setStats(stats);
setCsvData(data);
return true;
};
const onConflictModeChanged = async (e: ChangeEvent<HTMLSelectElement>) => {
if (progress !== null) {
return;
}
const value = e.target.value as "stop" | "skip";
setConflictMode(value);
};
const onPasswordModeChange = (e: ChangeEvent<HTMLInputElement>) => {
if (progress !== null) {
return;
}
setPasswordMode(e.target.checked);
};
const onUseridModeChanged = (e: ChangeEvent<HTMLSelectElement>) => {
if (progress !== null) {
return;
}
const value = e.target.value as "update" | "ignore";
setUseridMode(value);
};
const onDryRunModeChanged = (e: ChangeEvent<HTMLInputElement>) => {
if (progress !== null) {
return;
}
setDryRun(e.target.checked);
};
const runImport = async () => {
if (progress !== null) {
notify("import_users.errors.already_in_progress");
return;
}
const results = await doImport();
setImportResults(results);
// offer CSV download of skipped or errored records
// (so that the user doesn't have to filter out successful
// records manually when fixing stuff in the CSV)
setSkippedRecords(unparseCsv(results.skippedRecords));
if (LOGGING) console.log("Skipped records:");
if (LOGGING) console.log(skippedRecords);
};
const doImport = async (): Promise<ImportResult> => {
const skippedRecords: ImportLine[] = [];
const erroredRecords: ImportLine[] = [];
const succeededRecords: ImportLine[] = [];
const changeStats: ChangeStats = {
total: 0,
id: 0,
is_guest: 0,
admin: 0,
password: 0,
};
let entriesDone = 0;
const entriesCount = csvData.length;
try {
setProgress({ done: entriesDone, limit: entriesCount });
for (const entry of csvData) {
const userRecord = { ...entry };
// No need to do a bunch of cryptographic random number getting if
// we are using neither a generated password nor a generated user id.
if (useridMode === "ignore" || userRecord.id === undefined || userRecord.id === "") {
userRecord.id = generateRandomMXID();
}
if (passwordMode === false || entry.password === undefined || entry.password === "") {
userRecord.password = generateRandomPassword();
}
// we want to ensure that the ID is always full MXID, otherwise randomly-generated MXIDs will be in the full
// form, but the ones from the CSV will be localpart-only.
userRecord.id = returnMXID(userRecord.id);
/* TODO record update stats (especially admin no -> yes, deactivated x -> !x, ... */
/* For these modes we will consider the ID that's in the record.
* If the mode is "stop", we will not continue adding more records, and
* we will offer information on what was already added and what was
* skipped.
*
* If the mode is "skip", we record the record for later, but don't
* send it to the server.
*
* If the mode is "update", we change fields that are reasonable to
* update.
* - If the "password mode" is "true" (i.e. "use passwords from csv"):
* - if the record has a password
* - send the password along with the record
* - if the record has no password
* - generate a new password
* - If the "password mode" is "false"
* - never generate a new password to update existing users with
*/
/* We just act as if there are no IDs in the CSV, so every user will be
* created anew.
* We do a simple retry loop so that an accidental hit on an existing ID
* doesn't trip us up.
*/
if (LOGGING) console.log("will check for existence of record " + JSON.stringify(userRecord));
let retries = 0;
const submitRecord = async (recordData: ImportLine) => {
try {
await dataProvider.getOne("users", { id: recordData.id });
if (LOGGING) console.log("already existed");
if (conflictMode === "stop") {
throw new Error(
translate("import_users.error.id_exits", {
id: recordData.id,
})
);
}
if (conflictMode === "skip" || useridMode === "update") {
skippedRecords.push(recordData);
return;
}
const newRecordData = Object.assign({}, recordData, {
id: generateRandomMXID(),
});
retries++;
if (retries > 512) {
console.warn("retry loop got stuck? pathological situation?");
skippedRecords.push(recordData);
return;
}
await submitRecord(newRecordData);
} catch (e) {
if (!(e instanceof HttpError) || (e.status && e.status !== 404)) {
throw e;
}
if (LOGGING) console.log("OK to create record " + recordData.id + " (" + recordData.displayname + ").");
if (!dryRun) {
await dataProvider.create("users", { data: recordData });
}
succeededRecords.push(recordData);
}
};
await submitRecord(userRecord);
entriesDone++;
setProgress({ done: entriesDone, limit: csvData.length });
}
setProgress(null);
} catch (e) {
setErrors([
translate("import_users.error.at_entry", {
entry: entriesDone + 1,
message: e instanceof Error ? e.message : String(e),
}),
]);
setProgress(null);
}
return {
skippedRecords,
erroredRecords,
succeededRecords,
totalRecordCount: entriesCount,
changeStats,
wasDryRun: dryRun,
};
};
const downloadSkippedRecords = () => {
const element = document.createElement("a");
console.log(skippedRecords);
const file = new Blob([skippedRecords], {
type: "text/comma-separated-values",
});
element.href = URL.createObjectURL(file);
element.download = "skippedRecords.csv";
document.body.appendChild(element); // Required for this to work in FireFox
element.click();
};
return {
csvData,
dryRun,
onDryRunModeChanged,
runImport,
progress,
importResults,
errors,
stats,
conflictMode,
passwordMode,
useridMode,
onConflictModeChanged,
onPasswordModeChange,
onUseridModeChanged,
onFileChange,
downloadSkippedRecords,
};
};
export default useImportFile;

View File

@ -2,7 +2,7 @@ import { formalGermanMessages } from "@haleos/ra-language-german";
import { SynapseTranslationMessages } from ".";
const de: SynapseTranslationMessages = {
const fixedGermanMessages = {
...formalGermanMessages,
ra: {
...formalGermanMessages.ra,
@ -10,22 +10,60 @@ const de: SynapseTranslationMessages = {
...formalGermanMessages.ra.navigation,
no_filtered_results: "Keine Ergebnisse",
clear_filters: "Alle Filter entfernen",
add_filter: "Filter hinzufügen",
},
auth: {
...formalGermanMessages.ra.auth,
email: "E-Mail",
},
action: {
...formalGermanMessages.ra.action,
update_application: "Anwendung aktualisieren",
select_all_button: "Alle auswählen",
},
page: {
...formalGermanMessages.ra.page,
empty: "Leer",
access_denied: "Zugriff verweigert",
authentication_error: "Authentifizierungsfehler",
},
message: {
...formalGermanMessages.ra.message,
access_denied: "Sie haben nicht die erforderlichen Berechtigungen um auf diese Seite zuzugreifen.",
authentication_error:
"Der Authentifizierungsserver hat einen Fehler zurückgegeben und Ihre Anmeldedaten konnten nicht überprüft werden.",
select_all_limit_reached:
"Es gibt zu viele Elemente, um sie alle auszuwählen. Es wurden nur die ersten %{max} Elemente ausgewählt.",
placeholder_data_warning: "Netzwerkproblem: Datenaktualisierung fehlgeschlagen.",
},
},
};
const de: SynapseTranslationMessages = {
...fixedGermanMessages,
synapseadmin: {
auth: {
base_url: "Heimserver URL",
welcome: "Willkommen bei Synapse-admin",
welcome: "Willkommen bei Synapse Admin",
server_version: "Synapse Version",
supports_specs: "unterstützt Matrix-Specs",
username_error: "Bitte vollständigen Nutzernamen angeben: '@user:domain'",
protocol_error: "Die URL muss mit 'http://' oder 'https://' beginnen",
url_error: "Keine gültige Matrix Server URL",
sso_sign_in: "Anmeldung mit SSO",
credentials: "Anmeldedaten",
access_token: "Zugriffstoken",
logout_acces_token_dialog: {
title: "Sie verwenden ein bestehendes Matrix-Zugriffstoken.",
content:
"Möchten Sie diese Sitzung (die anderswo, z.B. in einem Matrix-Client, verwendet werden könnte) beenden oder sich nur vom Admin-Panel abmelden?",
confirm: "Sitzung beenden",
cancel: "Nur vom Admin-Panel abmelden",
},
},
users: {
invalid_user_id: "Lokaler Anteil der Matrix Benutzer-ID ohne Homeserver.",
tabs: { sso: "SSO" },
tabs: { sso: "SSO", experimental: "Experimentell", limits: "Rate Limits", account_data: "Kontodaten" },
},
rooms: {
details: "Raumdetails",
@ -34,6 +72,7 @@ const de: SynapseTranslationMessages = {
members: "Mitglieder",
detail: "Details",
permission: "Berechtigungen",
media: "Medien",
},
},
reports: { tabs: { basic: "Allgemein", detail: "Details" } },
@ -53,7 +92,7 @@ const de: SynapseTranslationMessages = {
goToPdf: "Gehe zum PDF",
cards: {
importstats: {
header: "Benutzer importieren",
header: "Geparste Benutzer für den Import",
users_total: "%{smart_count} Benutzer in der CSV Datei |||| %{smart_count} Benutzer in der CSV Datei",
guest_count: "%{smart_count} Gast |||| %{smart_count} Gäste",
admin_count: "%{smart_count} Server Administrator |||| %{smart_count} Server Administratoren",
@ -116,6 +155,20 @@ const de: SynapseTranslationMessages = {
send: "Diese API löscht die lokalen Medien von der Festplatte des eigenen Servers. Dies umfasst alle lokalen Miniaturbilder und Kopien von Medien. Diese API wirkt sich nicht auf Medien aus, die sich in externen Medien-Repositories befinden.",
},
},
purge_remote_media: {
name: "Externe Medien",
fields: {
before_ts: "letzter Zugriff vor",
},
action: {
send: "Externe Medien löschen",
send_success: "Die Anfrage zum Löschen externer Medien wurde gesendet.",
send_failure: "Bei der Anfrage zum Löschen externer Medien ist ein Fehler aufgetreten.",
},
helper: {
send: "Diese API löscht den externen Medien-Cache von der Festplatte Ihres eigenen Servers. Dazu gehören alle lokalen Thumbnails und Kopien heruntergeladener Medien. Diese API beeinflusst nicht die Medien, die in das eigene Medienarchiv des Servers hochgeladen wurden.",
},
},
resources: {
users: {
name: "Benutzer",
@ -129,10 +182,13 @@ const de: SynapseTranslationMessages = {
is_guest: "Gast",
admin: "Server Administrator",
locked: "Gesperrt",
suspended: "Suspendiert",
deactivated: "Deaktiviert",
erased: "Gelöscht",
guests: "Zeige Gäste",
show_deactivated: "Zeige deaktivierte Benutzer",
show_locked: "Zeige gesperrte Benutzer",
show_suspended: "Zeige suspendierte Benutzer",
user_id: "Suche Benutzer",
displayname: "Anzeigename",
password: "Passwort",
@ -148,11 +204,50 @@ const de: SynapseTranslationMessages = {
},
helper: {
password: "Durch die Änderung des Passworts wird der Benutzer von allen Sitzungen abgemeldet.",
password_required_for_reactivation: "Sie müssen ein Passwort angeben, um ein Konto wieder zu aktivieren.",
create_password: "Generiere ein starkes und sicheres Passwort mit dem Button unten.",
deactivate: "Sie müssen ein Passwort angeben, um ein Konto wieder zu aktivieren.",
erase: "DSGVO konformes Löschen der Benutzerdaten",
suspend:
"Ein gesperrter Benutzer kann sich nicht mehr anmelden und wird in den schreibgeschützten Modus versetzt.",
erase: "DSGVO konformes Löschen der Benutzerdaten.",
admin: "Ein Serveradministrator hat volle Kontrolle über den Server und seine Benutzer.",
lock: "Verhindert, dass der Benutzer den Server nutzen kann. Dies ist eine nicht-destruktive Aktion, die rückgängig gemacht werden kann.",
erase_text:
"Das bedeutet, dass die von dem/den Benutzer(n) gesendeten Nachrichten für alle, die zum Zeitpunkt des Sendens im Raum waren, sichtbar bleiben, aber für Benutzer, die dem Raum später beitreten, nicht sichtbar sind.",
erase_admin_error: "Das Löschen des eigenen Benutzers ist nicht erlaubt.",
modify_managed_user_error: "Das Ändern eines vom System verwalteten Benutzers ist nicht zulässig.",
username_available: "Benutzername verfügbar",
},
badge: {
you: "Sie",
bot: "Bot",
admin: "Administrator",
support: "Unterstützung",
regular: "Normaler Benutzer",
system_managed: "Systemverwalteter Benutzer",
},
action: {
erase: "Lösche Benutzerdaten",
erase_avatar: "Avatar löschen",
delete_media: "Alle von dem/den Benutzer(n) hochgeladenen Medien löschen",
redact_events: "Schwärzen aller vom Benutzer gesendeten Ereignisse (-s)",
generate_password: "Passwort generieren",
overwrite_title: "Warnung!",
overwrite_content:
"Dieser Benutzername ist bereits vergeben. Sind Sie sicher, dass Sie den vorhandenen Benutzer überschreiben möchten?",
overwrite_cancel: "Abbrechen",
overwrite_confirm: "Überschreiben",
},
limits: {
messages_per_second: "Nachrichten pro Sekunde",
messages_per_second_text: "Die Anzahl der Aktionen, die in einer Sekunde durchgeführt werden können.",
burst_count: "Burst-Anzahl",
burst_count_text: "Die Anzahl der Aktionen, die vor der Begrenzung durchgeführt werden können.",
},
account_data: {
title: "Kontodaten",
global: "Globale",
rooms: "Räume",
},
},
rooms: {
@ -176,10 +271,11 @@ const de: SynapseTranslationMessages = {
history_visibility: "Historie-Sichtbarkeit",
topic: "Thema",
avatar: "Avatar",
actions: "Aktionen",
},
helper: {
forward_extremities:
"Forward extremities are the leaf events at the end of a Directed acyclic graph (DAG) in a room, aka events that have no children. The more exist in a room, the more state resolution that Synapse needs to perform (hint: it's an expensive operation). While Synapse has code to prevent too many of these existing at one time in a room, bugs can sometimes make them crop up again. If a room has >10 forward extremities, it's worth checking which room is the culprit and potentially removing them using the SQL queries mentioned in #1760.",
"Vorderextremitäten sind Blatt-Ereignisse am Ende eines gerichteten azyklischen Graphens (DAG) in einem Raum, auch bekannt als Ereignisse ohne Nachkommen. Je mehr in einem Raum existieren, umso mehr Zustandsauflösungen muss Synapse absolvieren (Hinweis: dies ist eine sehr aufwendige Operation). Obwohl Synapse Code hat um zu verhindern, dass zuviele davon gleichzeitig in einem Raum existieren, können Bugs manchmal dafür sorgen, dass sie sich ansammeln. Wenn ein Raum >10 Vorderextremitäten hat ist es sinnvoll zu überprüfen um welchen Raum es sich handelt und sie gegebenenfalls, wie in #1769 beschrieben, mittels SQL-Queries zu entfernen.",
},
enums: {
join_rules: {
@ -204,7 +300,21 @@ const de: SynapseTranslationMessages = {
erase: {
title: "Raum löschen",
content:
"Sind Sie sicher dass Sie den Raum löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden. Alle Nachrichten und Medien, die der Raum beinhaltet werden vom Server gelöscht!",
"Sind Sie sicher, dass Sie den Raum löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden. Alle Nachrichten und Medien, die der Raum beinhaltet werden vom Server gelöscht!",
fields: {
block: "Blockieren und Benutzer daran hindern, dem Raum beizutreten",
},
success: "Raum/Räume erfolgreich gelöscht.",
failure: "Der/die Raum/Räume konnten nicht gelöscht werden.",
},
make_admin: {
assign_admin: "Raumadministrator zuweisen",
title: "Raumadministrator zu %{roomName} zuweisen",
confirm: "Raumadministrator zuweisen",
content:
"Geben Sie die vollständige MXID des Benutzers an, der als Administrator gesetzt werden soll.\nWarnung: Damit dies funktioniert, muss der Raum mindestens ein lokales Mitglied als Administrator haben.",
success: "Der/die Benutzer wurde/n als Raumadministrator gesetzt.",
failure: "Der/die Benutzer konnte/n nicht als Raumadministrator gesetzt werden. %{errMsg}",
},
},
},
@ -239,7 +349,7 @@ const de: SynapseTranslationMessages = {
erase: {
title: "Gemeldetes Event löschen",
content:
"Sind Sie sicher dass Sie das gemeldete Event löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.",
"Sind Sie sicher, dass Sie das gemeldete Event löschen möchten? Diese Aktion kann nicht rückgängig gemacht werden.",
},
},
},
@ -286,8 +396,8 @@ const de: SynapseTranslationMessages = {
},
protect_media: {
action: {
create: "Ungeschützt, Schutz erstellen",
delete: "Geschützt, Schutz aufheben",
create: "Ungeschützt, Schutz aktivieren",
delete: "Geschützt, Schutz deaktivieren",
none: "In Quarantäne",
send_success: "Erfolgreich den Schutz-Status geändert.",
send_failure: "Beim Versenden ist ein Fehler aufgetreten.",
@ -357,6 +467,18 @@ const de: SynapseTranslationMessages = {
sender: "Absender",
},
},
room_media: {
name: "Medien",
fields: {
media_id: "Medien ID",
},
helper: {
info: "Dies ist eine Liste der Medien, die in den Raum hochgeladen wurden. Es ist nicht möglich, Medien zu löschen, die in externen Medien-Repositories hochgeladen wurden.",
},
action: {
error: "%{errcode} (%{errstatus}) %{error}",
},
},
room_directory: {
name: "Raumverzeichnis",
fields: {
@ -367,8 +489,8 @@ const de: SynapseTranslationMessages = {
title: "Raum aus Verzeichnis löschen |||| %{smart_count} Räume aus Verzeichnis löschen",
content:
"Möchten Sie den Raum wirklich aus dem Raumverzeichnis löschen? |||| Möchten Sie die %{smart_count} Räume wirklich aus dem Raumverzeichnis löschen?",
erase: "Lösche aus Verzeichnis",
create: "Eintragen ins Verzeichnis",
erase: "Aus Verzeichnis löschen",
create: "Ins Verzeichnis eintragen",
send_success: "Raum erfolgreich eingetragen.",
send_failure: "Beim Entfernen ist ein Fehler aufgetreten.",
},
@ -390,7 +512,7 @@ const de: SynapseTranslationMessages = {
fields: {
token: "Token",
valid: "Gültige Token",
uses_allowed: "Anzahl",
uses_allowed: "Verwendungen erlaubt",
pending: "Ausstehend",
completed: "Abgeschlossen",
expiry_time: "Ablaufzeit",

View File

@ -1,3 +1,13 @@
// SPDX-FileCopyrightText: 2020 Michael Albert
// SPDX-FileCopyrightText: 2020 - 2024 Manuel Stahl
// SPDX-FileCopyrightText: 2021 Dirk Klimpel
// SPDX-FileCopyrightText: 2023 Przemysław Romanik
// SPDX-FileCopyrightText: 2024 Alexander Tumin
// SPDX-FileCopyrightText: 2024 - 2025 Borislav Pantaleev
// SPDX-FileCopyrightText: 2024 - 2025 Nikita Chernyi
//
// SPDX-License-Identifier: Apache-2.0
import englishMessages from "ra-language-english";
import { SynapseTranslationMessages } from ".";
@ -7,17 +17,31 @@ const en: SynapseTranslationMessages = {
synapseadmin: {
auth: {
base_url: "Homeserver URL",
welcome: "Welcome to Synapse-admin",
welcome: "Welcome to Synapse Admin",
server_version: "Synapse version",
supports_specs: "supports Matrix specs",
username_error: "Please enter fully qualified user ID: '@user:domain'",
protocol_error: "URL has to start with 'http://' or 'https://'",
url_error: "Not a valid Matrix server URL",
sso_sign_in: "Sign in with SSO",
credentials: "Credentials",
access_token: "Access token",
logout_acces_token_dialog: {
title: "You are using an existing Matrix access token.",
content:
"Do you want to destroy this session (that could be used elsewhere, e.g. in a Matrix client) or just logout from the admin panel?",
confirm: "Destroy session",
cancel: "Just logout from admin panel",
},
},
users: {
invalid_user_id: "Localpart of a Matrix user-id without homeserver.",
tabs: { sso: "SSO" },
tabs: {
sso: "SSO",
experimental: "Experimental",
limits: "Rate Limits",
account_data: "Account Data",
},
},
rooms: {
details: "Room details",
@ -26,6 +50,7 @@ const en: SynapseTranslationMessages = {
members: "Members",
detail: "Details",
permission: "Permissions",
media: "Media",
},
},
reports: { tabs: { basic: "Basic", detail: "Details" } },
@ -44,7 +69,7 @@ const en: SynapseTranslationMessages = {
goToPdf: "Go to PDF",
cards: {
importstats: {
header: "Import users",
header: "Parsed users for import",
users_total: "%{smart_count} user in CSV file |||| %{smart_count} users in CSV file",
guest_count: "%{smart_count} guest |||| %{smart_count} guests",
admin_count: "%{smart_count} admin |||| %{smart_count} admins",
@ -107,6 +132,20 @@ const en: SynapseTranslationMessages = {
send: "This API deletes the local media from the disk of your own server. This includes any local thumbnails and copies of media downloaded. This API will not affect media that has been uploaded to external media repositories.",
},
},
purge_remote_media: {
name: "Remote Media",
fields: {
before_ts: "last access before",
},
action: {
send: "Purge remote media",
send_success: "Purge remote media request has been sent.",
send_failure: "An error has occurred with the purge remote media request.",
},
helper: {
send: "This API purges the remote media cache from the disk of your own server. This includes any local thumbnails and copies of media downloaded. This API will not affect media that has been uploaded to the server's own media repository.",
},
},
resources: {
users: {
name: "User |||| Users",
@ -120,11 +159,13 @@ const en: SynapseTranslationMessages = {
is_guest: "Guest",
admin: "Server Administrator",
locked: "Locked",
suspended: "Suspended",
deactivated: "Deactivated",
erased: "Erased",
guests: "Show guests",
show_deactivated: "Show deactivated users",
show_locked: "Show locked users",
show_suspended: "Show suspended users",
user_id: "Search user",
displayname: "Displayname",
password: "Password",
@ -140,11 +181,48 @@ const en: SynapseTranslationMessages = {
},
helper: {
password: "Changing password will log user out of all sessions.",
password_required_for_reactivation: "You must provide a password to re-activate an account.",
create_password: "Generate a strong and secure password using the button below.",
lock: "Prevent the user from usefully using their account. This is a non-destructive action that can be reversed.",
deactivate: "You must provide a password to re-activate an account.",
erase: "Mark the user as GDPR-erased",
suspend: "Suspending user means they are put into a read-only mode.",
erase: "In addition to deactivating the user, mark the user as GDPR-erased.",
admin: "A server administrator has full control over the server and its users.",
erase_text:
"This means messages sent by the user(-s) will still be visible by anyone who was in the room when these messages were sent, but hidden from users joining the room afterward.",
erase_admin_error: "Deleting own user is not allowed.",
modify_managed_user_error: "Modifying a system-managed user is not allowed.",
username_available: "Username is available",
},
action: {
erase: "Erase user data",
erase_avatar: "Erase avatar",
delete_media: "Delete all media uploaded by the user(-s)",
redact_events: "Redact all events sent by the user(-s)",
generate_password: "Generate password",
overwrite_title: "Warning!",
overwrite_content: "This username is already taken. Are you sure that you want to overwrite the existing user?",
overwrite_cancel: "Cancel",
overwrite_confirm: "Overwrite",
},
badge: {
you: "You",
bot: "Bot",
admin: "Admin",
support: "Support",
regular: "Regular User",
system_managed: "System-managed",
},
limits: {
messages_per_second: "Messages per second",
messages_per_second_text: "The number of actions that can be performed in a second.",
burst_count: "Burst count",
burst_count_text: "How many actions that can be performed before being limited.",
},
account_data: {
title: "Account Data",
global: "Global",
rooms: "Rooms",
},
},
rooms: {
@ -168,6 +246,7 @@ const en: SynapseTranslationMessages = {
history_visibility: "History visibility",
topic: "Topic",
avatar: "Avatar",
actions: "Actions",
},
helper: {
forward_extremities:
@ -197,6 +276,20 @@ const en: SynapseTranslationMessages = {
title: "Delete room",
content:
"Are you sure you want to delete the room? This cannot be undone. All messages and shared media in the room will be deleted from the server!",
fields: {
block: "Block and prevent users from joining the room",
},
success: "Room/s successfully deleted.",
failure: "The room/s could not be deleted.",
},
make_admin: {
assign_admin: "Assign admin",
title: "Assign a room admin to %{roomName}",
confirm: "Make admin",
content:
"Put the full MXID of the user which will be set as admin.\nWarning: for this to work, the room needs to have at least one local member as admin.",
success: "The user has been set as room admin.",
failure: "The user could not be set as room admin. %{errMsg}",
},
},
},
@ -348,6 +441,18 @@ const en: SynapseTranslationMessages = {
sender: "Sender",
},
},
room_media: {
name: "Media",
fields: {
media_id: "Media ID",
},
helper: {
info: "This is a list of media that has been uploaded to the room. It is not possible to delete media that has been uploaded to external media repositories.",
},
action: {
error: "%{errcode} (%{errstatus}) %{error}",
},
},
room_directory: {
name: "Room directory",
fields: {
@ -390,5 +495,23 @@ const en: SynapseTranslationMessages = {
helper: { length: "Length of the token if no token is given." },
},
},
scheduled_commands: {
action: {
create_success: "Scheduled command created successfully",
update_success: "Scheduled command updated successfully",
update_failure: "An error has occurred",
delete_success: "Scheduled command deleted successfully",
delete_failure: "An error has occurred",
},
},
recurring_commands: {
action: {
create_success: "Recurring command created successfully",
update_success: "Recurring command updated successfully",
update_failure: "An error has occurred",
delete_success: "Recurring command deleted successfully",
delete_failure: "An error has occurred",
},
},
};
export default en;

View File

@ -13,10 +13,19 @@ const fa: SynapseTranslationMessages = {
protocol_error: "URL باید با 'http://' یا 'https://' شروع شود",
url_error: "آدرس وارد شده یک سرور معتبر نیست",
sso_sign_in: "با SSO وارد شوید",
credentials: "اعتبارنامه",
access_token: "توکن دسترسی",
logout_acces_token_dialog: {
title: "شما در حال استفاده از یک نشانه دسترسی ماتریکس موجود هستید.",
content:
"آیا می‌خواهید این جلسه (که می‌تواند در جای دیگر، مانند یک کلاینت ماتریکس استفاده شود) را نابود کنید یا فقط از پنل مدیریت خارج شوید؟",
confirm: "نابودی جلسه",
cancel: "فقط خروج از پنل مدیریت",
},
},
users: {
invalid_user_id: "بخش محلی یک شناسه کاربری ماتریکس بدون سرور خانگی.",
tabs: { sso: "SSO" },
tabs: { sso: "SSO", experimental: "تجربی", limits: "محدودیت ها", account_data: "داده های کاربر" },
},
rooms: {
tabs: {
@ -24,6 +33,7 @@ const fa: SynapseTranslationMessages = {
members: "اعضا",
detail: "جزئیات",
permission: "مجوزها",
media: "رسانه ها",
},
},
reports: { tabs: { basic: "اصلی", detail: "جزئیات" } },
@ -42,7 +52,7 @@ const fa: SynapseTranslationMessages = {
goToPdf: "رفتن به PDF",
cards: {
importstats: {
header: "وارد کردن کاربران",
header: "کاربران پردازش شده برای وارد کردن",
users_total: "%{smart_count} user in CSV file |||| %{smart_count} users in CSV file",
guest_count: "%{smart_count} guest |||| %{smart_count} guests",
admin_count: "%{smart_count} admin |||| %{smart_count} admins",
@ -105,6 +115,20 @@ const fa: SynapseTranslationMessages = {
send: "این API رسانه های محلی را از دیسک سرور خود حذف می کند. این شامل هر تصویر کوچک محلی و کپی از رسانه دانلود شده است. این API بر رسانه‌هایی که در مخازن رسانه خارجی آپلود شده‌اند تأثیری نخواهد گذاشت.",
},
},
purge_remote_media: {
name: "رسانه‌های از راه دور",
fields: {
before_ts: "آخرین دسترسی قبل از",
},
action: {
send: "پاک کردن رسانه‌های از راه دور",
send_success: "درخواست پاک کردن رسانه‌های از راه دور ارسال شد.",
send_failure: "درخواست برای پاک کردن رسانه‌های از راه دور با خطا مواجه شد.",
},
helper: {
send: "این API کش رسانه‌های از راه دور را از دیسک سرور شما پاک می‌کند. این شامل هر گونه بندانگشتی محلی و نسخه‌های رسانه‌های دانلود شده می‌شود. این API بر رسانه‌های آپلود شده به مخزن رسانه سرور تأثیری نخواهد داشت.",
},
},
resources: {
users: {
name: "کاربر |||| کاربران",
@ -118,8 +142,12 @@ const fa: SynapseTranslationMessages = {
is_guest: "مهمان",
admin: "مدیر سرور",
deactivated: "غیرفعال",
locked: "قفل شده",
suspended: "معلق",
guests: "نمایش مهمانان",
show_deactivated: "نمایش کاربران غیرفعال شده",
show_locked: "نمایش کاربران قفل شده",
show_suspended: "نمایش کاربران معلق",
user_id: "جستجوی کاربر",
displayname: "نام نمایشی",
password: "رمز عبور",
@ -134,12 +162,50 @@ const fa: SynapseTranslationMessages = {
user_type: "نوع کاربر",
},
helper: {
password_required_for_reactivation: "برای فعالسازی مجدد حساب باید رمز عبور وارد کنید.",
admin: "مدیر سرور دارای کنترل کامل بر روی سرور و کاربران آن است.",
lock: "ممنوعیت استفاده از سرور توسط کاربر. این یک عملیات غیر مخرب است که می تواند برگردانده شود.",
password: "با تغییر رمز عبور کاربر از تمام دستگاه ها خارج می شود.",
create_password: "رمز عبور قوی و امنی را با استفاده از دکمه زیر ایجاد کنید.",
deactivate: "برای فعالسازی مجدد حساب باید رمز عبور وارد کنید.",
suspend: "کاربران معلق نمی توانند وارد شوند و پیام های آنها به دیگران نمایش داده نمی شود.",
erase: "کاربر را به عنوان GDPR پاک شده علامت گذاری کنید",
erase_text:
"وهذا يعني أن الرسائل المرسلة من قبل المستخدم (المستخدمين) ستظل مرئية من قبل أي شخص كان في الغرفة عند إرسال هذه الرسائل، ولكنها مخفية عن المستخدمين الذين ينضمون إلى الغرفة بعد ذلك.",
erase_admin_error: "حذف المستخدم الخاص غير مسموح به.",
modify_managed_user_error: "لا يُسمح بتغيير المستخدم الذي يديره النظام.",
username_available: "نام کاربری موجود",
},
badge: {
you: "شما",
bot: "ربات",
admin: "مدیر",
support: "پشتیبان",
regular: "کاربر عادی",
system_managed: "مدیریت سیستم",
},
action: {
erase: "پاک کردن اطلاعات کاربر",
erase_avatar: "محو الصورة الرمزية",
delete_media: "حذف جميع الوسائط التي تم تحميلها بواسطة المستخدم (المستخدمين)",
redact_events: "تنقيح جميع الأحداث المرسلة من قبل المستخدم (-s)",
generate_password: "توليد رمز عبور",
overwrite_title: "هشدار!",
overwrite_content:
"این نام کاربری قبلا استفاده شده است. آیا مطمئن هستید که می خواهید کاربر موجود را بازنویسی کنید؟",
overwrite_cancel: "انصراف",
overwrite_confirm: "بازنویسی",
},
limits: {
messages_per_second: "پیام در ثانیه",
messages_per_second_text: "تعداد عملیاتی که می تواند در یک ثانیه انجام شود.",
burst_count: "تعداد پیچیدگی",
burst_count_text: "تعداد عملیاتی که می تواند قبل از محدودیت انجام شود.",
},
account_data: {
title: "داده های کاربر",
global: "عمومی",
rooms: "اتاق ها",
},
},
rooms: {
@ -163,6 +229,7 @@ const fa: SynapseTranslationMessages = {
history_visibility: "مشاهده تاریخچه",
topic: "موضوع",
avatar: "آواتار",
actions: "عملیات",
},
helper: {
forward_extremities:
@ -192,6 +259,20 @@ const fa: SynapseTranslationMessages = {
title: "حذف اتاق",
content:
"آیا مطمئن هستید که می خواهید اتاق را حذف کنید؟ این قابل بازگشت نیست. همه پیام ها و رسانه های مشترک در اتاق از سرور حذف می شوند!",
fields: {
block: "حذف",
},
success: "اتاق با موفقیت حذف شد.",
failure: "خطایی رخ داده است.",
},
make_admin: {
assign_admin: "مدیر انتخاب کنید",
title: "مدیر اتاق %{roomName} را انتخاب کنید",
confirm: "مدیر انتخاب کنید",
content:
"کامل MXID کاربری را وارد کنید که به عنوان مدیر تنظیم شود.\nهشدار: برای این کار، اتاق باید حداقل یک اعضای محلی به عنوان مدیر داشته باشد.",
success: "کاربر به عنوان مدیر اتاق تنظیم شد.",
failure: "کاربر به عنوان مدیر اتاق تنظیم نشد. %{errMsg}",
},
},
},
@ -330,6 +411,18 @@ const fa: SynapseTranslationMessages = {
sender: "فرستنده",
},
},
room_media: {
name: "رسانه ها",
fields: {
media_id: "شناسه رسانه",
},
helper: {
info: "این یک لیست از رسانه ها است که در اتاق بارگذاری شده است. نمی توان رسانه ها را حذف کرد که در اتاق های خارجی بارگذاری شده اند.",
},
action: {
error: "%{errcode} (%{errstatus}) %{error}",
},
},
room_directory: {
name: "راهنمای اتاق",
fields: {

View File

@ -7,16 +7,30 @@ const fr: SynapseTranslationMessages = {
synapseadmin: {
auth: {
base_url: "URL du serveur daccueil",
welcome: "Bienvenue sur Synapse-admin",
welcome: "Bienvenue sur Synapse Admin",
server_version: "Version du serveur Synapse",
username_error: "Veuillez entrer un nom d'utilisateur complet : « @utilisateur:domaine »",
protocol_error: "L'URL doit commencer par « http:// » ou « https:// »",
url_error: "L'URL du serveur Matrix n'est pas valide",
sso_sign_in: "Se connecter avec lauthentification unique",
credentials: "Identifiants",
access_token: "Jeton d'accès",
logout_acces_token_dialog: {
title: "Vous utilisez un jeton d'accès Matrix existant.",
content:
"Voulez-vous détruire cette session (qui pourrait être utilisée ailleurs, par exemple dans un client Matrix) ou simplement vous déconnecter du panneau d'administration?",
confirm: "Détruire la session",
cancel: "Se déconnecter simplement du panneau d'administration",
},
},
users: {
invalid_user_id: "Partie locale d'un identifiant utilisateur Matrix sans le nom du serveur daccueil.",
tabs: { sso: "Authentification unique" },
tabs: {
sso: "Authentification unique",
experimental: "Expérimental",
limits: "Limites",
account_data: "Données du compte",
},
},
rooms: {
tabs: {
@ -24,6 +38,7 @@ const fr: SynapseTranslationMessages = {
members: "Membres",
detail: "Détails",
permission: "Permissions",
media: "Médias",
},
},
reports: { tabs: { basic: "Informations de base", detail: "Détails" } },
@ -43,7 +58,7 @@ const fr: SynapseTranslationMessages = {
goToPdf: "Voir le PDF",
cards: {
importstats: {
header: "Importer des utilisateurs",
header: "Utilisateurs analysés pour l'import",
users_total:
"%{smart_count} utilisateur dans le fichier CSV |||| %{smart_count} utilisateurs dans le fichier CSV",
guest_count: "%{smart_count} visiteur |||| %{smart_count} visiteurs",
@ -108,6 +123,20 @@ const fr: SynapseTranslationMessages = {
send: "Cette API supprime les médias locaux du disque de votre propre serveur. Cela inclut toutes les vignettes locales et les copies des médias téléchargés. Cette API n'affectera pas les médias qui ont été téléversés dans des dépôts de médias externes.",
},
},
purge_remote_media: {
name: "Médias distants",
fields: {
before_ts: "dernier accès avant",
},
action: {
send: "Purger les médias distants",
send_success: "La demande de purge des médias distants a été envoyée.",
send_failure: "Une erreur est survenue lors de la demande de purge des médias distants.",
},
helper: {
send: "Cette API purge le cache des médias distants du disque de votre propre serveur. Cela inclut toutes les vignettes locales et les copies des médias téléchargés. Cette API n'affectera pas les médias qui ont été téléchargés dans le dépôt de médias du serveur.",
},
},
resources: {
users: {
name: "Utilisateur |||| Utilisateurs",
@ -121,9 +150,12 @@ const fr: SynapseTranslationMessages = {
is_guest: "Visiteur",
admin: "Administrateur du serveur",
locked: "Verrouillé",
suspended: "Suspendu",
deactivated: "Désactivé",
guests: "Afficher les visiteurs",
show_deactivated: "Afficher les utilisateurs désactivés",
show_locked: "Afficher les utilisateurs verrouillés",
show_suspended: "Afficher les utilisateurs suspendus",
user_id: "Rechercher un utilisateur",
displayname: "Nom d'affichage",
password: "Mot de passe",
@ -137,11 +169,50 @@ const fr: SynapseTranslationMessages = {
auth_provider: "Fournisseur d'identité",
},
helper: {
password: "Changer le mot de passe déconnectera l'utilisateur de toutes les sessions.",
password_required_for_reactivation: "Vous devez fournir un mot de passe pour réactiver le compte.",
create_password: "Générer un mot de passe fort et sécurisé en utilisant le bouton ci-dessous.",
deactivate: "Vous devrez fournir un mot de passe pour réactiver le compte.",
suspend: "L'utilisateur sera suspendu jusqu'à ce que vous le réactiviez.",
erase: "Marquer l'utilisateur comme effacé conformément au RGPD",
admin: "Un administrateur de serveur a un contrôle total sur le serveur et ses utilisateurs.",
lock: "Empêche l'utilisateur d'utiliser le serveur. C'est une action non destructive qui peut être annulée.",
erase_text:
"Cela signifie que les messages envoyés par le(s) utilisateur(s) seront toujours visibles par toute personne qui se trouvait dans la salle au moment où ces messages ont été envoyés, mais qu'ils seront cachés aux utilisateurs qui rejoindront la salle par la suite.",
erase_admin_error: "La suppression de son propre utilisateur n'est pas autorisée.",
modify_managed_user_error: "La modification d'un utilisateur géré par le système n'est pas autorisée.",
username_available: "Nom d'utilisateur disponible",
},
badge: {
you: "Vous",
bot: "Bot",
admin: "Admin",
support: "Support",
regular: "Utilisateur régulier",
system_managed: "Géré par le système",
},
action: {
erase: "Effacer les données de l'utilisateur",
erase_avatar: "Effacer l'avatar",
delete_media: "Supprimer tous les médias téléchargés par le(s) utilisateur(s)",
redact_events: "Expurger tous les événements envoyés par l'utilisateur(-s)",
generate_password: "Générer un mot de passe",
overwrite_title: "Attention !",
overwrite_content:
"Ce nom d'utilisateur est déjà pris. Êtes-vous sûr de vouloir écraser l'utilisateur existant ?",
overwrite_cancel: "Annuler",
overwrite_confirm: "Écraser",
},
limits: {
messages_per_second: "Messages par seconde",
messages_per_second_text: "Le nombre d'actions que l'utilisateur peut effectuer par seconde.",
burst_count: "Compteur de pics",
burst_count_text: "Le nombre d'actions que l'utilisateur peut effectuer avant d'être limité.",
},
account_data: {
title: "Données du compte",
global: "Globales",
rooms: "Salons",
},
},
rooms: {
@ -165,6 +236,7 @@ const fr: SynapseTranslationMessages = {
history_visibility: "Visibilité de l'historique",
topic: "Sujet",
avatar: "Avatar",
actions: "Actions",
},
helper: {
forward_extremities:
@ -194,6 +266,20 @@ const fr: SynapseTranslationMessages = {
title: "Supprimer le salon",
content:
"Voulez-vous vraiment supprimer le salon ? Cette opération ne peut être annulée. Tous les messages et médias partagés du salon seront supprimés du serveur !",
fields: {
block: "Bloquer et empêcher les utilisateurs de rejoindre la salle",
},
success: "Salle/s supprimées avec succès.",
failure: "La/les salle/s n'ont pas pu être supprimées.",
},
make_admin: {
assign_admin: "Assigner un administrateur",
title: "Assigner un administrateur au salon %{roomName}",
confirm: "Assigner un administrateur",
content:
"Entrez la MXID complète de l'utilisateur qui sera désigné comme administrateur.\nAttention : pour que cela fonctionne, la salle doit avoir au moins un membre local en tant qu'administrateur.",
success: "L'utilisateur a été désigné comme administrateur de la salle.",
failure: "L'utilisateur n'a pas pu être désigné comme administrateur de la salle. %{errMsg}",
},
},
},
@ -332,6 +418,18 @@ const fr: SynapseTranslationMessages = {
sender: "Expéditeur",
},
},
room_media: {
name: "Médias",
fields: {
media_id: "Identifiant du média",
},
helper: {
info: "Cette liste contient les médias qui ont été téléchargés dans le salon. Il n'est pas possible de supprimer les médias qui ont été téléversés dans des dépôts de médias externes.",
},
action: {
error: "%{errcode} (%{errstatus}) %{error}",
},
},
room_directory: {
name: "Répertoire des salons",
fields: {

109
src/i18n/index.d.ts vendored
View File

@ -11,10 +11,18 @@ interface SynapseTranslationMessages extends TranslationMessages {
protocol_error: string;
url_error: string;
sso_sign_in: string;
credentials: string;
access_token: string;
logout_acces_token_dialog: {
title: string;
content: string;
confirm: string;
cancel: string;
};
};
users: {
invalid_user_id: string;
tabs: { sso: string };
tabs: { sso: string; experimental: string; limits: string; account_data: string };
};
rooms: {
details?: string; // TODO: fa, fr, it, zh
@ -23,6 +31,7 @@ interface SynapseTranslationMessages extends TranslationMessages {
members: string;
detail: string;
permission: string;
media: string;
};
};
reports: { tabs: { basic: string; detail: string } };
@ -103,6 +112,20 @@ interface SynapseTranslationMessages extends TranslationMessages {
send: string;
};
};
purge_remote_media: {
name: string;
fields: {
before_ts: string;
};
action: {
send: string;
send_success: string;
send_failure: string;
};
helper: {
send: string;
};
};
resources: {
users: {
name: string;
@ -116,11 +139,13 @@ interface SynapseTranslationMessages extends TranslationMessages {
is_guest: string;
admin: string;
locked?: string; // TODO: fa, zh
suspended: string;
deactivated: string;
erased?: string; // TODO: fa, fr, it, zh
guests: string;
show_deactivated: string;
show_locked?: string; // TODO: de, fa, fr, it, zh
show_suspended: string;
user_id: string;
displayname: string;
password: string;
@ -135,12 +160,48 @@ interface SynapseTranslationMessages extends TranslationMessages {
user_type?: string;
};
helper: {
password?: string;
password: string;
password_required_for_reactivation: string;
create_password: string;
lock: string;
deactivate: string;
suspend: string;
admin: string;
erase: string;
erase_text: string;
erase_admin_error: string;
modify_managed_user_error: string;
username_available: string;
};
action: {
erase: string;
erase_avatar: string;
delete_media: string;
redact_events: string;
generate_password: string;
overwrite_title: string;
overwrite_content: string;
overwrite_cancel: string;
overwrite_confirm: string;
};
badge: {
you: string;
bot: string;
admin: string;
support: string;
regular: string;
system_managed: string;
};
limits: {
messages_per_second: string;
messages_per_second_text: string;
burst_count: string;
burst_count_text: string;
};
account_data: {
title: string;
global: string;
rooms: string;
};
};
rooms: {
@ -164,6 +225,7 @@ interface SynapseTranslationMessages extends TranslationMessages {
history_visibility: string;
topic?: string;
avatar?: string;
actions: string;
};
helper?: {
forward_extremities: string;
@ -191,6 +253,19 @@ interface SynapseTranslationMessages extends TranslationMessages {
erase: {
title: string;
content: string;
fields: {
block: string;
};
success: string;
failure: string;
};
make_admin: {
assign_admin: string;
title: string;
confirm: string;
content: string;
success: string;
failure: string;
};
};
};
@ -344,6 +419,18 @@ interface SynapseTranslationMessages extends TranslationMessages {
sender: string;
};
};
room_media?: {
name: string;
fields: {
media_id: string;
};
helper: {
info: string;
};
action: {
error: string;
};
};
room_directory?: {
name: string;
fields: {
@ -389,4 +476,22 @@ interface SynapseTranslationMessages extends TranslationMessages {
};
};
};
scheduled_commands?: {
action: {
create_success: string;
update_success: string;
update_failure: string;
delete_success: string;
delete_failure: string;
};
};
recurring_commands?: {
action: {
create_success: string;
update_success: string;
update_failure: string;
delete_success: string;
delete_failure: string;
};
};
}

View File

@ -7,16 +7,25 @@ const it: SynapseTranslationMessages = {
synapseadmin: {
auth: {
base_url: "URL dell'homeserver",
welcome: "Benvenuto in Synapse-admin",
welcome: "Benvenuto in Synapse Admin",
server_version: "Versione di Synapse",
username_error: "Per favore inserisci un ID utente completo: '@utente:dominio'",
protocol_error: "L'URL deve iniziare per 'http://' o 'https://'",
url_error: "URL del server Matrix non valido",
sso_sign_in: "Accedi con SSO",
credentials: "Credenziali",
access_token: "Token di accesso",
logout_acces_token_dialog: {
title: "Stai utilizzando un token di accesso Matrix esistente.",
content:
"Vuoi distruggere questa sessione (che potrebbe essere utilizzata altrove, ad esempio in un client Matrix) o semplicemente disconnetterti dal pannello di amministrazione?",
confirm: "Distruggi sessione",
cancel: "Disconnetti solo dal pannello di amministrazione",
},
},
users: {
invalid_user_id: "ID utente non valido su questo homeserver.",
tabs: { sso: "SSO" },
tabs: { sso: "SSO", experimental: "Sperimentale", limits: "Limiti", account_data: "Dati del profilo" },
},
rooms: {
tabs: {
@ -24,6 +33,7 @@ const it: SynapseTranslationMessages = {
members: "Membro",
detail: "Dettagli",
permission: "Permessi",
media: "Media",
},
},
reports: { tabs: { basic: "Semplice", detail: "Dettagli" } },
@ -42,7 +52,7 @@ const it: SynapseTranslationMessages = {
goToPdf: "Vai al PDF",
cards: {
importstats: {
header: "Importa utenti",
header: "Utenti analizzati per l'importazione",
users_total: "%{smart_count} utente nel file CSV |||| %{smart_count} utenti nel file CSV",
guest_count: "%{smart_count} ospite |||| %{smart_count} ospiti",
admin_count: "%{smart_count} amministratore |||| %{smart_count} amministratori",
@ -105,6 +115,20 @@ const it: SynapseTranslationMessages = {
send: "Questa API cancella i media locali dal disco del tuo server. Questo include anche ogni miniatura e copia del media scaricato. Questa API non inciderà sui media che sono stati caricati nei repository esterni.",
},
},
purge_remote_media: {
name: "Media Remoti",
fields: {
before_ts: "ultimo accesso prima di",
},
action: {
send: "Elimina media remoti",
send_success: "La richiesta per eliminare i media remoti è stata inviata.",
send_failure: "Si è verificato un errore con la richiesta di eliminazione dei media remoti.",
},
helper: {
send: "Questa API elimina la cache dei media remoti dal disco del tuo server. Questo include qualsiasi miniatura locale e copie di media scaricati. Questa API non influirà sui media che sono stati caricati nel repository multimediale del server.",
},
},
resources: {
users: {
name: "Utente |||| Utenti",
@ -118,9 +142,12 @@ const it: SynapseTranslationMessages = {
is_guest: "Ospite",
admin: "Amministratore",
locked: "Bloccato",
suspended: "Sospeso",
deactivated: "Disattivato",
guests: "Mostra gli ospiti",
show_deactivated: "Mostra gli utenti disattivati",
show_locked: "Mostra gli utenti bloccati",
show_suspended: "Mostra gli utenti sospesi",
user_id: "Cerca utente",
displayname: "Nickname",
password: "Password",
@ -136,11 +163,49 @@ const it: SynapseTranslationMessages = {
},
helper: {
password: "Cambiando la password l'utente verrà disconnesso da tutte le sessioni attive.",
password_required_for_reactivation: "Devi fornire una password per riattivare l'account.",
create_password: "Genera una password forte e sicura utilizzando il pulsante sottostante.",
deactivate: "Devi fornire una password per riattivare l'account.",
suspend: "Sospendi l'utente",
erase: "Constrassegna l'utente come cancellato dal GDPR",
admin: "Un amministratore del server ha controllo totale sul server e sui suoi utenti.",
lock: "Impedisce all'utente di utilizzare il server. Questa è un'azione non distruttiva che può essere annullata.",
erase_text:
"Ciò significa che i messaggi inviati dall'utente (o dagli utenti) saranno ancora visibili da chiunque si trovasse nella stanza al momento dell'invio, ma saranno nascosti agli utenti che si uniranno alla stanza in seguito.",
erase_admin_error: "Non è consentito eliminare il proprio utente.",
modify_managed_user_error: "La modifica di un utente gestito dal sistema non è consentita.",
username_available: "Nome utente disponibile",
},
badge: {
you: "Tu",
bot: "Bot",
admin: "Amministratore",
support: "Supporto",
regular: "Utente normale",
system_managed: "Gestito dal sistema",
},
action: {
erase: "Cancella i dati dell'utente",
erase_avatar: "Cancella l'avatar dell'utente",
delete_media: "Elimina tutti i media caricati dall'utente(-s)",
redact_events: "Ridurre tutti gli eventi inviati dall'utente(-s)",
generate_password: "Genera password",
overwrite_title: "Attenzione!",
overwrite_content:
"Questo nome utente è già stato utilizzato. Sei sicuro di voler sovrascrivere l'utente esistente?",
overwrite_cancel: "Annulla",
overwrite_confirm: "Sovrascrivi",
},
limits: {
messages_per_second: "Messaggi al secondo",
messages_per_second_text: "Il numero di azioni che l'utente può eseguire al secondo.",
burst_count: "Burst-conteggio",
burst_count_text: "Il numero di azioni che l'utente può eseguire prima di essere limitato.",
},
account_data: {
title: "Dati del profilo",
global: "Globale",
rooms: "Stanza",
},
},
rooms: {
@ -164,10 +229,11 @@ const it: SynapseTranslationMessages = {
history_visibility: "Visibilità temporale",
topic: "Topic",
avatar: "Avatar",
actions: "Azioni",
},
helper: {
/* forward_extremities:
"Forward extremities are the leaf events at the end of a Directed acyclic graph (DAG) in a room, aka events that have no children. The more exist in a room, the more state resolution that Synapse needs to perform (hint: it's an expensive operation). While Synapse has code to prevent too many of these existing at one time in a room, bugs can sometimes make them crop up again. If a room has >10 forward extremities, it's worth checking which room is the culprit and potentially removing them using the SQL queries mentioned in #1760.", */
"Forward extremities are the leaf events at the end of a Directed acyclic graph (DAG) in a room, aka events that have no children. The more exist in a room, the more state resolution that Synapse needs to perform (hint: it's an expensive operation). While Synapse has code to prevent too many of these existing at one time in a room, bugs can sometimes make them crop up again. If a room has >10 forward extremities, it's worth checking which room is the culprit and potentially removing them using the SQL queries mentioned in #1760.", */
},
enums: {
join_rules: {
@ -194,6 +260,15 @@ const it: SynapseTranslationMessages = {
content:
"Sei sicuro di voler eliminare questa stanza? Questa azione è definitiva. Tutti i messaggi e i media condivisi in questa stanza verranno eliminati dal server!",
},
make_admin: {
assign_admin: "Assegna un amministratore",
title: "Assegna un amministratore alla stanza %{roomName}",
confirm: "Assegna un amministratore",
content:
"Inserisci la MXID completa dell'utente che sarà designato come amministratore.\nAttenzione: per questo funzionare, la stanza deve avere almeno un membro locale come amministratore.",
success: "L'utente è stato designato come amministratore della stanza.",
failure: "L'utente non può essere designato come amministratore della stanza. %{errMsg}",
},
},
},
reports: {
@ -331,6 +406,18 @@ const it: SynapseTranslationMessages = {
sender: "Mittente",
},
},
room_media: {
name: "Media",
fields: {
media_id: "ID Media",
},
helper: {
info: "Questo è un elenco dei media caricati nella stanza. Non è possibile eliminare i media caricati su repository esterni.",
},
action: {
error: "%{errcode} (%{errstatus}) %{error}",
},
},
room_directory: {
name: "Elenco delle stanze",
fields: {

519
src/i18n/ja.ts Normal file
View File

@ -0,0 +1,519 @@
// SPDX-FileCopyrightText: 2020 Michael Albert
// SPDX-FileCopyrightText: 2020 - 2024 Manuel Stahl
// SPDX-FileCopyrightText: 2021 Dirk Klimpel
// SPDX-FileCopyrightText: 2023 Przemysław Romanik
// SPDX-FileCopyrightText: 2024 Alexander Tumin
// SPDX-FileCopyrightText: 2024 - 2025 Borislav Pantaleev
// SPDX-FileCopyrightText: 2024 - 2025 Nikita Chernyi
// SPDX-FileCopyrightText: 2025 Suguru Hirahara
//
// SPDX-License-Identifier: Apache-2.0
import japaneseMessages from "@bicstone/ra-language-japanese";
import { SynapseTranslationMessages } from ".";
const ja: SynapseTranslationMessages = {
...japaneseMessages,
synapseadmin: {
auth: {
base_url: "ホームサーバーのURL",
welcome: "Synapse Adminにようこそ",
server_version: "Synapseのバージョン",
supports_specs: "次のMatrixのスペックをサポートしています",
username_error: "有効なユーザーIDを入力してください。形式は「@user:domain」です。",
protocol_error: "URLの先頭には「http://」または「https://」を置いてください",
url_error: "正しいMatrixのサーバーのURLではありません",
sso_sign_in: "シングルサインオン",
credentials: "認証情報",
access_token: "アクセストークン",
logout_acces_token_dialog: {
title: "既存のMatrixアクセストークンが使われています。",
content:
"このセッションを破棄しますか このセッションは、Matrixのクライアントなどで使われている可能性があります。または、管理パネルからログアウトしますか",
confirm: "破棄する",
cancel: "管理パネルからログアウト",
},
},
users: {
invalid_user_id: "ホームサーバーが指定されていないMatrixのユーザーIDです。",
tabs: {
sso: "シングルサインオン",
experimental: "実験的",
limits: "レート制限",
account_data: "アカウントのデータ",
},
},
rooms: {
details: "ルームの詳細",
tabs: {
basic: "基本情報",
members: "メンバー",
detail: "詳細",
permission: "権限",
media: "メディア",
},
},
reports: { tabs: { basic: "基本情報", detail: "詳細" } },
},
import_users: {
error: {
at_entry: "エントリー %{entry}: %{message}",
error: "エラー",
required_field: "必須のフィールド「%{field}」がありません",
invalid_value:
"%{row}行目に不正な値があります。「%{field}」のフィールドには「true」または「false」を指定してください",
unreasonably_big: "ファイルは%{size}メガバイトで大きすぎるため、読み込みを行いませんでした",
already_in_progress: "インポートを実行しています",
id_exits: "ID %{id} は既に存在しています",
},
title: "CSVでユーザーをインポート",
goToPdf: "Go to PDF",
cards: {
importstats: {
header: "インポートするユーザー",
users_total: "CSVファイルの%{smart_count}人のユーザー",
guest_count: "%{smart_count}人のゲスト",
admin_count: "%{smart_count}人の管理者",
},
conflicts: {
header: "競合を処理する方針",
mode: {
stop: "競合の発生時に停止",
skip: "エラーを表示して競合をスキップ",
},
},
ids: {
header: "ID",
all_ids_present: "全てのエントリーにIDsがあります",
count_ids_present: "%{smart_count}個のエントリーにIDがあります",
mode: {
ignore: "CSVファイルのIDを無視し、新しいIDを作成",
update: "既存のレコードを更新",
},
},
passwords: {
header: "パスワード",
all_passwords_present: "全てのエントリーにパスワードがあります",
count_passwords_present: "%{smart_count}個のエントリーにパスワードがあります",
use_passwords: "CSVファイルのパスワードを使用",
},
upload: {
header: "CSVファイルを送信",
explanation:
"作成またはアップデートするユーザーをコンマで区切って入力したファイルをアップロードできます。ファイルには「id」と「displayname」のフィールドを含めてください。参照用のファイルは以下からダウンロードできます。",
},
startImport: {
simulate_only: "シミュレーション",
run_import: "インポート",
},
results: {
header: "インポートの結果",
total: "合計%{smart_count}個のエントリー",
successful: "%{smart_count}個のエントリーをインポートしました",
skipped: "%{smart_count}個のエントリーをスキップしました",
download_skipped: "スキップしたエントリーをダウンロード",
with_error: "%{smart_count}個のエントリーでエラーが発生しました",
simulated_only: "シミュレーションのみ実行",
},
},
},
delete_media: {
name: "メディアファイル",
fields: {
before_ts: "最終アクセス日時がこれより以前のもの",
size_gt: "サイズがこれより大きいもの(バイト)",
keep_profiles: "プロフィールの画像は削除しない",
},
action: {
send: "メディアファイルを削除",
send_success: "リクエストを送信しました。",
send_failure: "エラーが発生しました。",
},
helper: {
send: "このAPIを使うとサーバーからローカルメディアファイルを削除できます。削除できるファイルは、ローカルのサムネイルファイルと、ダウンロードしたメディアファイルのコピーも含みます。外部のメディアリポジトリーにアップロードされたメディアファイルは削除できません。",
},
},
purge_remote_media: {
name: "リモートのメディアファイル",
fields: {
before_ts: "最終アクセス日時がこれより以前のもの",
},
action: {
send: "リモートのメディアファイルを削除",
send_success: "削除のリクエストを送信しました。",
send_failure: "エラーが発生しました。",
},
helper: {
send: "このAPIを使うとサーバーからリモートメディアファイルのキャッシュを削除できます。削除できるファイルは、ローカルのサムネイルファイルと、ダウンロードしたメディアファイルのコピーも含みます。サーバーのメディアリポジトリーにアップロードされたメディアファイルは削除できません。",
},
},
resources: {
users: {
name: "ユーザー",
email: "メールアドレス",
msisdn: "電話番号",
threepid: "メールアドレスまたは電話番号",
fields: {
avatar: "アバター",
id: "ユーザーID",
name: "名前",
is_guest: "ゲスト",
admin: "サーバーの管理者",
locked: "ロック",
suspended: "停止",
deactivated: "無効化",
erased: "消去",
guests: "ゲストを表示",
show_deactivated: "無効化されたユーザーを表示",
show_locked: "ロックされたユーザーを表示",
show_suspended: "停止されたユーザーを表示",
user_id: "ユーザーを検索",
displayname: "表示名",
password: "パスワード",
avatar_url: "アバターのURL",
avatar_src: "アバター",
medium: "Medium",
threepids: "サードパーティーのID",
address: "アドレス",
creation_ts_ms: "作成日時",
consent_version: "同意のバージョン",
auth_provider: "プロバイダー",
user_type: "ユーザーの種類",
},
helper: {
password: "パスワードを変更すると、全てのセッションからログアウトします。",
password_required_for_reactivation: "アカウントを再度有効にするにはパスワードを設定する必要があります",
create_password: "以下のボタンで強力なパスワードを生成できます。",
lock: "ユーザーにアカウントを使用できないよう設定。これは後から取り消せます。",
deactivate: "アカウントを再度有効にするにはパスワードを設定する必要があります。",
suspend: "ユーザーを停止すると、ユーザーは読み込み限定のモードに設定されます。",
erase: "ユーザーをGDPRに準拠した形で消去",
admin: "サーバーの管理者には、サーバーとユーザーに対する完全なコントロールの権利が与えられています。",
erase_text:
"ユーザーが送信したメッセージは、メッセージが送信された時点にルームに参加していたユーザーは今後もこれを閲覧できますが、その後で参加したユーザーには表示されません。",
erase_admin_error: "自分自身のユーザーは削除できません。",
modify_managed_user_error: "システムが管理しているユーザーは変更できません。",
username_available: "ユーザー名は利用できます",
},
action: {
erase: "ユーザーのデータを消去",
erase_avatar: "アバターを消去",
delete_media: "このユーザーがアップロードしたメディアファイルを削除",
redact_events: "このユーザーが送信したイベントを削除",
generate_password: "パスワードを生成",
overwrite_title: "注意!",
overwrite_content: "このユーザー名はすでに取得されています。既存のユーザーを上書きしてもよろしいですか?",
overwrite_cancel: "キャンセル",
overwrite_confirm: "上書きする",
},
badge: {
you: "あなた",
bot: "ボット",
admin: "管理者",
support: "サポート",
regular: "一般ユーザー",
system_managed: "システム管理",
},
limits: {
messages_per_second: "毎秒のメッセージ数",
messages_per_second_text: "毎秒ごとに実行できるアクションの数。",
burst_count: "バースト数",
burst_count_text: "制限が実行されるまで行えるアクションの数。",
},
account_data: {
title: "アカウントのデータ",
global: "グローバル",
rooms: "ルーム",
},
},
rooms: {
name: "ルーム",
fields: {
room_id: "ルームのID",
name: "名称",
canonical_alias: "エイリアス",
joined_members: "メンバー",
joined_local_members: "ローカルのメンバー",
joined_local_devices: "ローカルの端末",
state_events: "ステートイベント / 複雑さ",
version: "バージョン",
is_encrypted: "暗号化",
encryption: "暗号化",
federatable: "フェデレーションに対応",
public: "ルームディレクトリーに表示",
creator: "作成者",
join_rules: "参加のルール",
guest_access: "ゲストによるアクセス",
history_visibility: "履歴の見え方",
topic: "トピック",
avatar: "アバター",
actions: "アクション",
},
helper: {
forward_extremities:
"転送末端forward extremitiesは、ルーム内の有向非巡回グラフDAGの終端にあるイベント、つまり、子をもたないイベントのことをいいます。これが多ければ多いほど、Synapseが実行しなければならないステート解決これは負荷の大きい作業ですの数も多くなります。Synapseには、ルーム内に存在する末端の数を減らす仕組みが備わっていますが、バグによりそれが機能しない場合があります。もしルームに10個以上の転送末端がある場合は、どのルームがそれを引き起こしているかを確認して #1760 で参照されているSQLクエリーで転送末端を削除することを検討してみてください。",
},
enums: {
join_rules: {
public: "公開",
knock: "ノック",
invite: "招待",
private: "非公開",
},
guest_access: {
can_join: "ゲスト参加可",
forbidden: "ゲスト参加不可",
},
history_visibility: {
invited: "招待以後",
joined: "参加以後",
shared: "共有以後",
world_readable: "制限なし",
},
unencrypted: "非暗号化",
},
action: {
erase: {
title: "ルームの削除",
content:
"ルームを削除してよろしいですか? これは取り消せません。ルームのメッセージとメディアファイルはサーバーから削除されます!",
fields: {
block: "ユーザーがルームに参加できないように設定",
},
success: "ルームを削除しました。",
failure: "ルームを削除できませんでした。",
},
make_admin: {
assign_admin: "管理者を任命",
title: "%{roomName}のルームの管理者を任命",
confirm: "管理者にする",
content:
"管理者に任命するユーザーのMXIDを入力してください。\n注意これが機能するには、ルームには管理者となるローカルメンバーが最低1人以上いる必要があります。",
success: "ユーザーをルームの管理者に設定しました。",
failure: "ユーザーをルームの管理者に設定できませんでした。%{errMsg}",
},
},
},
reports: {
name: "報告されたイベント",
fields: {
id: "ID",
received_ts: "報告日時",
user_id: "報告者",
name: "ルーム名",
score: "点数",
reason: "理由",
event_id: "イベントのID",
event_json: {
origin: "送信元のサーバー",
origin_server_ts: "送信日時",
type: "イベントの種類",
content: {
msgtype: "内容の種類",
body: "内容",
format: "形式",
formatted_body: "フォーマット済の内容",
algorithm: "アルゴリズム",
url: "URL",
info: {
mimetype: "種類",
},
},
},
},
action: {
erase: {
title: "報告されたイベントを削除",
content: "報告されたイベントを削除してよろしいですか?これは取り消せません。",
},
},
},
connections: {
name: "接続",
fields: {
last_seen: "日時",
ip: "IPアドレス",
user_agent: "ユーザーエージェント",
},
},
devices: {
name: "端末",
fields: {
device_id: "端末のID",
display_name: "端末の名称",
last_seen_ts: "タイムスタンプ",
last_seen_ip: "IPアドレス",
},
action: {
erase: {
title: "%{id}を削除",
content: "「%{name}」を削除してよろしいですか?",
success: "端末を削除しました。",
failure: "エラーが発生しました。",
},
},
},
users_media: {
name: "メディアファイル",
fields: {
media_id: "メディアのID",
media_length: "ファイルの大きさ(バイト数)",
media_type: "種類",
upload_name: "ファイル名",
quarantined_by: "検疫の実行者",
safe_from_quarantine: "検疫で保護",
created_ts: "作成日時",
last_access_ts: "最終アクセス",
},
action: {
open: "メディアファイルを新しいウィンドウで開く",
},
},
protect_media: {
action: {
create: "未保護。保護を実行",
delete: "保護済。保護を削除",
none: "検疫済",
send_success: "保護に関する状態を変更しました。",
send_failure: "エラーが発生しました。",
},
},
quarantine_media: {
action: {
name: "検疫",
create: "検疫に追加",
delete: "検疫に追加されています。検疫から取り出す",
none: "検疫によって保護されています",
send_success: "検疫に関する状態を変更しました。",
send_failure: "エラーが発生しました。",
},
},
pushers: {
name: "プッシュ",
fields: {
app: "アプリケーション",
app_display_name: "アプリケーションの名称",
app_id: "アプリケーションのID",
device_display_name: "端末の名称",
kind: "種類",
lang: "言語",
profile_tag: "プロフィールのタグ",
pushkey: "プッシュ鍵",
data: { url: "URL" },
},
},
servernotices: {
name: "サーバーの告知",
send: "サーバーの告知を送信",
fields: {
body: "メッセージ",
},
action: {
send: "告知を送信",
send_success: "サーバーの告知を送信しました。",
send_failure: "エラーが発生しました。",
},
helper: {
send: "サーバーの告知を指定したユーザーに送信。「サーバーの告知」機能がサーバーで有効になっている必要があります。",
},
},
user_media_statistics: {
name: "ユーザーのメディア",
fields: {
media_count: "メディア数",
media_length: "メディアの大きさ",
},
},
forward_extremities: {
name: "転送末端",
fields: {
id: "イベントのID",
received_ts: "タイムスタンプ",
depth: "深さ",
state_group: "ステートのグループ",
},
},
room_state: {
name: "ステートイベント",
fields: {
type: "種類",
content: "内容",
origin_server_ts: "送信日時",
sender: "送信元",
},
},
room_media: {
name: "メディア",
fields: {
media_id: "メディアのID",
},
helper: {
info: "ルームにアップロードされたメディアファイルの一覧です。外部のレポジトリーにアップロードされたメディアファイルは削除できません。",
},
action: {
error: "%{errcode} (%{errstatus}) %{error}",
},
},
room_directory: {
name: "ルームのディレクトリー",
fields: {
world_readable: "ゲストユーザーは参加せず閲覧可",
guest_can_join: "ゲストユーザーが参加可能",
},
action: {
title: "ルームをディレクトリーから削除 |||| %{smart_count}個のルームをディレクトリーから削除",
content:
"このルームをディレクトリーから削除してよろしいですか? |||| %{smart_count}個のルームをディレクトリーから削除してよろしいですか?",
erase: "ルームをディレクトリーから削除",
create: "ルームをディレクトリーで公開",
send_success: "ルームを公開しました。",
send_failure: "エラーが発生しました。",
},
},
destinations: {
name: "フェデレーション",
fields: {
destination: "目的地",
failure_ts: "失敗した時点のタイムスタンプ",
retry_last_ts: "最後に試行した時点のタイムスタンプ",
retry_interval: "再試行までの間隔",
last_successful_stream_ordering: "最後に成功したストリーム",
stream_ordering: "ストリーム",
},
action: { reconnect: "再接続" },
},
registration_tokens: {
name: "登録トークン",
fields: {
token: "トークン",
valid: "有効なトークン",
uses_allowed: "使用が許可",
pending: "保留中",
completed: "完了",
expiry_time: "期限切れとなる日時",
length: "長さ",
},
helper: { length: "トークンが与えられていない場合のトークンの長さ。" },
},
},
scheduled_commands: {
action: {
create_success: "スケジュール済のコマンドを作成しました",
update_success: "スケジュール済のコマンドを更新しました",
update_failure: "エラーが発生しました",
delete_success: "スケジュール済のコマンドを削除しました",
delete_failure: "エラーが発生しました",
},
},
recurring_commands: {
action: {
create_success: "繰り返しを行うコマンドを作成しました",
update_success: "繰り返しを行うコマンドを更新しました",
update_failure: "エラーが発生しました",
delete_success: "繰り返しを行うコマンドを削除しました",
delete_failure: "エラーが発生しました",
},
},
};
export default ja;

View File

@ -2,7 +2,7 @@ import russianMessages from "ra-language-russian";
import { SynapseTranslationMessages } from ".";
const ru: SynapseTranslationMessages = {
const fixedRussianMessages = {
...russianMessages,
ra: {
...russianMessages.ra,
@ -11,21 +11,55 @@ const ru: SynapseTranslationMessages = {
no_filtered_results: "Нет результатов",
clear_filters: "Все фильтры сбросить",
},
action: {
...russianMessages.ra.action,
select_all_button: "Выбрать все",
},
page: {
...russianMessages.ra.page,
empty: "Пусто",
access_denied: "Доступ запрещен",
authentication_error: "Ошибка аутентификации",
},
message: {
...russianMessages.ra.message,
access_denied: "У вас нет прав доступа к этой странице.",
authentication_error: "Сервер аутентификации вернул ошибку и не смог проверить ваши учетные данные.",
select_all_limit_reached: "Слишком много элементов для выбора. Были выбраны только первые %{max} элементов.",
},
},
};
const ru: SynapseTranslationMessages = {
...fixedRussianMessages,
synapseadmin: {
auth: {
base_url: "Адрес домашнего сервера",
welcome: "Добро пожаловать в Synapse-admin",
welcome: "Добро пожаловать в Synapse Admin",
server_version: "Версия Synapse",
supports_specs: "поддерживает спецификации Matrix",
username_error: "Пожалуйста, укажите полный ID пользователя: '@user:domain'",
protocol_error: "Адрес должен начинаться с 'http://' или 'https://'",
url_error: "Неверный адрес сервера Matrix",
sso_sign_in: "Вход через SSO",
credentials: "Учетные данные",
access_token: "Токен доступа",
logout_acces_token_dialog: {
title: "Вы используете существующий токен доступа Matrix.",
content:
"Вы хотите завершить эту сессию (которая может быть использована в другом месте, например, в клиенте Matrix) или просто выйти из панели администрирования?",
confirm: "Завершить сессию",
cancel: "Просто выйти из панели администрирования",
},
},
users: {
invalid_user_id: "Локальная часть ID пользователя Matrix без адреса домашнего сервера.",
tabs: { sso: "SSO" },
tabs: {
sso: "SSO",
experimental: "Экспериментальные",
limits: "Ограничения",
account_data: "Данные пользователя",
},
},
rooms: {
details: "Данные комнаты",
@ -34,6 +68,7 @@ const ru: SynapseTranslationMessages = {
members: "Участники",
detail: "Подробности",
permission: "Права доступа",
media: "Медиа",
},
},
reports: { tabs: { basic: "Основные", detail: "Подробности" } },
@ -52,7 +87,7 @@ const ru: SynapseTranslationMessages = {
goToPdf: "Перейти к PDF",
cards: {
importstats: {
header: "Импорт пользователей",
header: "Анализированные пользователи для импорта",
users_total:
"%{smart_count} пользователь в CSV файле |||| %{smart_count} пользователя в CSV файле |||| %{smart_count} пользователей в CSV файле",
guest_count: "%{smart_count} гость |||| %{smart_count} гостя |||| %{smart_count} гостей",
@ -87,7 +122,7 @@ const ru: SynapseTranslationMessages = {
header: "Загрузить CSV файл",
explanation:
"Здесь вы можете загрузить файл со значениями, разделёнными запятыми, которые будут использованы для создания или обновления данных пользователей. \
В файле должны быть поля 'id' и 'displayname'. Вы можете скачать и изменить файл-образец отсюда: ",
В файле должны быть поля 'id' и 'displayname'. Вы можете скачать и изменить файл-образец отсюда: ",
},
startImport: {
simulate_only: "Только симулировать",
@ -124,6 +159,20 @@ const ru: SynapseTranslationMessages = {
Данный API не затрагивает файлы, загруженные во внешние хранилища.",
},
},
purge_remote_media: {
name: "Внешние медиа",
fields: {
before_ts: "последний доступ до",
},
action: {
send: "Очистить внешние медиа",
send_success: "Запрос на очистку внешних медиа был отправлен.",
send_failure: "Произошла ошибка при запросе очистки внешних медиа.",
},
helper: {
send: "Этот API очищает кэш внешних медиа с диска вашего сервера. Это включает любые локальные миниатюры и копии загруженных медиа. Этот API не повлияет на медиа, которые были загружены в собственное медиа-хранилище сервера.",
},
},
resources: {
users: {
name: "Пользователь |||| Пользователи",
@ -137,10 +186,13 @@ const ru: SynapseTranslationMessages = {
is_guest: "Гость",
admin: "Администратор сервера",
locked: "Заблокирован",
suspended: "Приостановлен",
deactivated: "Деактивирован",
erased: "Удалён",
guests: "Показывать гостей",
show_deactivated: "Показывать деактивированных",
show_locked: "Показывать заблокированных",
show_suspended: "Показывать приостановленных",
user_id: "Поиск пользователя",
displayname: "Отображаемое имя",
password: "Пароль",
@ -156,11 +208,50 @@ const ru: SynapseTranslationMessages = {
},
helper: {
password: "Смена пароля завершит все сессии пользователя.",
password_required_for_reactivation: "Вы должны предоставить пароль для реактивации учётной записи.",
create_password: "Сгенерировать надёжный и безопасный пароль, используя кнопку ниже.",
deactivate: "Вы должны предоставить пароль для реактивации учётной записи.",
suspend:
"Приостановка учётной записи означает, что пользователь не сможет войти в свою учётную запись, пока она не будет снова активирована.",
erase: "Пометить пользователя как удалённого в соответствии с GDPR",
admin: "Администратор сервера имеет полный контроль над сервером и его пользователями.",
lock: "Предотвращает использование пользователем сервера. Это неразрушающее действие, которое может быть отменено.",
erase_text:
"Это означает, что сообщения, отправленные пользователем (-ами), будут по-прежнему видны всем, кто находился в комнате в момент их отправки, но будут скрыты от пользователей, присоединившихся к комнате после этого.",
erase_admin_error: "Удаление собственного пользователя запрещено.",
modify_managed_user_error: "Изменение пользователя, управляемого системой, не допускается.",
username_available: "Имя пользователя доступно",
},
badge: {
you: "Вы",
bot: "Бот",
admin: "Админ",
support: "Поддержка",
regular: "Обычный пользователь",
system_managed: "Управляемый системой",
},
action: {
erase: "Удалить данные пользователя",
erase_avatar: "Удалить аватар",
delete_media: "Удаление всех медиафайлов, загруженных пользователем (-ами)",
redact_events: "Удаление всех событий, отправленных пользователем (-ами)",
generate_password: "Сгенерировать пароль",
overwrite_title: "Предупреждение!",
overwrite_content:
"Это имя пользователя уже занято. Вы уверены, что хотите перезаписать существующего пользователя?",
overwrite_cancel: "Отмена",
overwrite_confirm: "Перезаписать",
},
limits: {
messages_per_second: "Сообщений в секунду",
messages_per_second_text: "Количество действий, которые могут быть выполнены в секунду.",
burst_count: "Burst-счётчик",
burst_count_text: "Количество действий, которые могут быть выполнены до ограничения.",
},
account_data: {
title: "Данные пользователя",
global: "Глобальные",
rooms: "Комнаты",
},
},
rooms: {
@ -184,13 +275,14 @@ const ru: SynapseTranslationMessages = {
history_visibility: "Видимость истории",
topic: "Тема",
avatar: "Аватар",
actions: "Действия",
},
helper: {
forward_extremities:
"Оконечности это события-листья в конце ориентированного ациклического графа (DAG) в комнате, т.е. события без дочерних элементов. \
Чем больше их в комнате, тем больше Synapse работает над разрешением состояния (это дорогостоящая операция). \
Хотя Synapse старается не допускать существования слишком большого числа таких событий в комнате, из-за ошибок они иногда снова появляются. \
Если в комнате >10 оконечностей, стоит найти комнату-виновника и попробовать удалить их с помощью SQL-запросов из #1760.",
Чем больше их в комнате, тем больше Synapse работает над разрешением состояния (это дорогостоящая операция). \
Хотя Synapse старается не допускать существования слишком большого числа таких событий в комнате, из-за ошибок они иногда снова появляются. \
Если в комнате >10 оконечностей, стоит найти комнату-виновника и попробовать удалить их с помощью SQL-запросов из #1760.",
},
enums: {
join_rules: {
@ -216,6 +308,20 @@ const ru: SynapseTranslationMessages = {
title: "Удалить комнату",
content:
"Действительно удалить эту комнату? Это действие будет невозможно отменить. Все сообщения и файлы в комнате будут удалены с сервера!",
fields: {
block: "Заблокировать и запретить пользователям присоединяться к комнате",
},
success: "Комната/ы успешно удалены",
failure: "Комната/ы не могут быть удалены.",
},
make_admin: {
assign_admin: "Назначить администратора",
title: "Назначить администратора комнате %{roomName}",
confirm: "Назначить администратора",
content:
"Введите полную MXID пользователя, которого нужно назначить администратором.\nПредупреждение: для этого должен быть назначен хотя бы один локальный участник в качестве администратора.",
success: "Пользователь назначен администратором комнаты.",
failure: "Пользователь не может быть назначен администратором комнаты. %{errMsg}",
},
},
},
@ -367,6 +473,18 @@ const ru: SynapseTranslationMessages = {
sender: "Отправитель",
},
},
room_media: {
name: "Медиа",
fields: {
media_id: "ID медиа",
},
helper: {
info: "Это список медиа, которые были загружены в комнату. Невозможно удалить медиа, которые были загружены в внешние медиа-репозитории.",
},
action: {
error: "%{errcode} (%{errstatus}) %{error}",
},
},
room_directory: {
name: "Каталог комнат",
fields: {

View File

@ -2,7 +2,7 @@ import chineseMessages from "@haxqer/ra-language-chinese";
import { SynapseTranslationMessages } from ".";
const zh: SynapseTranslationMessages = {
const fixedChineseMessages = {
...chineseMessages,
ra: {
...chineseMessages.ra,
@ -11,20 +11,53 @@ const zh: SynapseTranslationMessages = {
no_filtered_results: "没有结果",
clear_filters: "清除所有过滤器",
},
auth: {
...chineseMessages.ra.auth,
email: "邮箱",
},
action: {
...chineseMessages.ra.action,
update_application: "更新应用",
select_all_button: "全部选择",
},
page: {
...chineseMessages.ra.page,
access_denied: "拒绝访问",
authentication_error: "认证错误",
},
message: {
...chineseMessages.ra.message,
access_denied: "您没有访问此页面的权限。",
authentication_error: "身份验证服务器返回错误,无法验证您的凭据。",
select_all_limit_reached: "选择的元素太多。只选择了前 %{max} 个元素。",
placeholder_data_warning: "网络问题:数据刷新失败。",
},
},
};
const zh: SynapseTranslationMessages = {
...fixedChineseMessages,
synapseadmin: {
auth: {
base_url: "服务器 URL",
welcome: "欢迎来到 Synapse-admin",
welcome: "欢迎来到 Synapse Admin",
server_version: "Synapse 版本",
username_error: "请输入完整有效的用户 ID: '@user:domain'",
protocol_error: "URL 需要以'http://'或'https://'作为起始",
url_error: "不是一个有效的 Matrix 服务器地址",
sso_sign_in: "使用 SSO 登录",
credentials: "凭证",
access_token: "访问令牌",
logout_acces_token_dialog: {
title: "您正在使用现有的 Matrix 访问令牌。",
content: "您想销毁此会话(可能在其他地方使用,例如在 Matrix 客户端中)还是仅从管理面板退出?",
confirm: "销毁会话",
cancel: "仅从管理面板退出",
},
},
users: {
invalid_user_id: "必须要是一个有效的 Matrix 用户 ID ,例如 @user_id:homeserver",
tabs: { sso: "SSO" },
tabs: { sso: "SSO", experimental: "实验性", limits: "限制", account_data: "账户数据" },
},
rooms: {
tabs: {
@ -32,6 +65,7 @@ const zh: SynapseTranslationMessages = {
members: "成员",
detail: "细节",
permission: "权限",
media: "媒体",
},
},
reports: { tabs: { basic: "基本", detail: "细节" } },
@ -50,7 +84,7 @@ const zh: SynapseTranslationMessages = {
goToPdf: "转到 PDF",
cards: {
importstats: {
header: "导入用户",
header: "分析用于导入用户",
users_total: "%{smart_count} 用户在 CSV 文件中 |||| %{smart_count} 用户在 CSV 文件中",
guest_count: "%{smart_count} 访客 |||| %{smart_count} 访客",
admin_count: "%{smart_count} 管理员 |||| %{smart_count} 管理员",
@ -113,6 +147,20 @@ const zh: SynapseTranslationMessages = {
send: "这个API会删除您硬盘上的本地媒体。包含了任何的本地缓存和下载的媒体备份。这个API不会影响上传到外部媒体存储库上的媒体文件。",
},
},
purge_remote_media: {
name: "远程媒体",
fields: {
before_ts: "最后访问于之前",
},
action: {
send: "清除远程媒体",
send_success: "远程媒体清除请求已发送。",
send_failure: "发生错误,远程媒体清除请求未成功。",
},
helper: {
send: "此API清除您服务器磁盘上的远程媒体缓存。这包括任何本地缩略图和下载的媒体副本。此API不会影响已经上传到服务器媒体存储库的媒体。",
},
},
resources: {
users: {
name: "用户",
@ -125,9 +173,13 @@ const zh: SynapseTranslationMessages = {
name: "用户名",
is_guest: "访客",
admin: "服务器管理员",
locked: "锁定",
deactivated: "被禁用",
suspended: "被锁定",
guests: "显示访客",
show_deactivated: "显示被禁用的账户",
show_locked: "显示被锁定的账户",
show_suspended: "显示被锁定的账户",
user_id: "搜索用户",
displayname: "显示名字",
password: "密码",
@ -140,11 +192,49 @@ const zh: SynapseTranslationMessages = {
consent_version: "协议版本",
},
helper: {
password: "更改密码会使用户注销所有会话。",
password_required_for_reactivation: "您必须提供一串密码来激活账户。",
create_password: "使用下面的按钮生成一个强大和安全的密码。",
deactivate: "您必须提供一串密码来激活账户。",
suspend: "您必须提供一串密码来暂停账户。",
erase: "将用户标记为根据 GDPR 的要求抹除了",
admin: "服务器管理员对服务器和其用户有完全的控制权。",
lock: "阻止用户使用服务器。这是一个非破坏性的操作,可以被撤销。",
erase_text:
"这意味着用户发送的信息对于发送信息时在房间内的任何人来说都是可见的,但对于之后加入房间的用户来说则是隐藏的。",
erase_admin_error: "不允许删除自己的用户",
modify_managed_user_error: "不允许修改系统管理的用户。",
username_available: "用户名可用",
},
badge: {
you: "您",
bot: "机器人",
admin: "管理员",
support: "支持",
regular: "普通用户",
system_managed: "系统管理",
},
action: {
erase: "抹除用户信息",
erase_avatar: "抹掉头像",
delete_media: "删除用户上传的所有媒体",
redact_events: "重新编辑用户(-s发送的所有事件",
generate_password: "生成密码",
overwrite_title: "警告!",
overwrite_content: "这个用户名已经被占用。您确定要覆盖现有的用户吗?",
overwrite_cancel: "取消",
overwrite_confirm: "覆盖",
},
limits: {
messages_per_second: "每秒消息数",
messages_per_second_text: "每秒可以执行的操作数。",
burst_count: "Burst-计数",
burst_count_text: "在限制之前可以执行的操作数。",
},
account_data: {
title: "账户数据",
global: "全局",
rooms: "房间",
},
},
rooms: {
@ -165,6 +255,9 @@ const zh: SynapseTranslationMessages = {
join_rules: "加入规则",
guest_access: "访客访问",
history_visibility: "历史可见性",
topic: "主题",
avatar: "头像",
actions: "操作",
},
enums: {
join_rules: {
@ -284,6 +377,18 @@ const zh: SynapseTranslationMessages = {
media_length: "媒体文件长度",
},
},
room_media: {
name: "媒体",
fields: {
media_id: "媒体ID",
},
helper: {
info: "这是上传到房间的媒体列表。无法删除上传到外部媒体存储库的媒体。",
},
action: {
error: "%{errcode} (%{errstatus}) %{error}",
},
},
},
};
export default zh;

View File

@ -1,18 +1,16 @@
import React from "react";
import { createRoot } from "react-dom/client";
import App from "./App";
import { AppContext } from "./AppContext";
import { App } from "./App";
import { AppContext } from "./Context";
import { FetchConfig, GetConfig } from "./utils/config";
fetch(`${import.meta.env.BASE_URL}/config.json`)
.then(res => res.json())
.then(props =>
createRoot(document.getElementById("root")).render(
<React.StrictMode>
<AppContext.Provider value={props}>
<App />
</AppContext.Provider>
</React.StrictMode>
)
);
await FetchConfig();
createRoot(document.getElementById("root")).render(
<React.StrictMode>
<AppContext.Provider value={GetConfig()}>
<App />
</AppContext.Provider>
</React.StrictMode>
);

View File

@ -1,21 +1,22 @@
import { act, render, screen } from "@testing-library/react";
import polyglotI18nProvider from "ra-i18n-polyglot";
import { render, screen } from "@testing-library/react";
import { AdminContext } from "react-admin";
import LoginPage from "./LoginPage";
import { AppContext } from "../AppContext";
import { AppContext } from "../Context";
import englishMessages from "../i18n/en";
const i18nProvider = polyglotI18nProvider(() => englishMessages, "en", [{ locale: "en", name: "English" }]);
describe("LoginForm", () => {
it("renders with no restriction to homeserver", () => {
render(
<AdminContext i18nProvider={i18nProvider}>
<LoginPage />
</AdminContext>
);
it("renders with no restriction to homeserver", async () => {
await act(async () => {
render(
<AdminContext i18nProvider={i18nProvider}>
<LoginPage />
</AdminContext>
);
});
screen.getByText(englishMessages.synapseadmin.auth.welcome);
screen.getByRole("combobox", { name: "" });
@ -30,7 +31,14 @@ describe("LoginForm", () => {
it("renders with single restricted homeserver", () => {
render(
<AppContext.Provider value={{ restrictBaseUrl: "https://matrix.example.com" }}>
<AppContext.Provider
value={{
restrictBaseUrl: "https://matrix.example.com",
asManagedUsers: [],
menu: [],
corsCredentials: "include",
}}
>
<AdminContext i18nProvider={i18nProvider}>
<LoginPage />
</AdminContext>
@ -53,6 +61,9 @@ describe("LoginForm", () => {
<AppContext.Provider
value={{
restrictBaseUrl: ["https://matrix.example.com", "https://matrix.example.org"],
asManagedUsers: [],
menu: [],
corsCredentials: "include",
}}
>
<AdminContext i18nProvider={i18nProvider}>

Some files were not shown because too many files have changed in this diff Show More