@lars_hagemann/mediaserver-frontend-plugin-types 0.24.3 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +12 -48
- package/types/plugin.d.ts +2 -1
- package/README.md +0 -186
package/package.json
CHANGED
|
@@ -1,61 +1,25 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lars_hagemann/mediaserver-frontend-plugin-types",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.0",
|
|
4
4
|
"files": [
|
|
5
|
-
"types"
|
|
6
|
-
"README.md"
|
|
5
|
+
"types"
|
|
7
6
|
],
|
|
8
7
|
"type": "module",
|
|
9
8
|
"types": "types/plugin.d.ts",
|
|
10
9
|
"repository": {
|
|
11
|
-
"url": "https://github.com/
|
|
10
|
+
"url": "https://github.com/de-treelab/mediaserver"
|
|
12
11
|
},
|
|
13
12
|
"scripts": {
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"preview": "vite preview --host 0.0.0.0",
|
|
17
|
-
"lint:check": "eslint .",
|
|
18
|
-
"lint:fix": "eslint . --fix",
|
|
19
|
-
"style:check": "prettier --check src/**/*.ts",
|
|
20
|
-
"style:fix": "prettier --write src/**/*.ts",
|
|
21
|
-
"types:plugins": "tsc -p tsconfig.plugin.json",
|
|
22
|
-
"prepare": "npm run types:plugins"
|
|
23
|
-
},
|
|
24
|
-
"dependencies": {
|
|
25
|
-
"@lars_hagemann/tags": "^1.0.4",
|
|
26
|
-
"@reduxjs/toolkit": "^2.9.2",
|
|
27
|
-
"@tailwindcss/vite": "^4.1.12",
|
|
28
|
-
"luxon": "^3.7.2",
|
|
29
|
-
"react": "^19.1.1",
|
|
30
|
-
"react-dom": "^19.1.1",
|
|
31
|
-
"react-i18next": "^15.7.3",
|
|
32
|
-
"react-icons": "^5.5.0",
|
|
33
|
-
"react-paginate": "^8.3.0",
|
|
34
|
-
"react-redux": "^9.2.0",
|
|
35
|
-
"react-router": "^7.8.2",
|
|
36
|
-
"react-use-websocket": "^4.13.0",
|
|
37
|
-
"redux-persist": "^6.0.0",
|
|
38
|
-
"tailwind-merge": "^3.3.1",
|
|
39
|
-
"tailwindcss": "^4.1.12",
|
|
40
|
-
"zod": "^4.1.5"
|
|
13
|
+
"types": "tsc -p tsconfig.plugin.json",
|
|
14
|
+
"prepare": "npm run types"
|
|
41
15
|
},
|
|
42
16
|
"devDependencies": {
|
|
43
|
-
"@
|
|
44
|
-
"@types/
|
|
45
|
-
"
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
"eslint-plugin-react": "^7.37.5",
|
|
51
|
-
"eslint-plugin-react-hooks": "^5.2.0",
|
|
52
|
-
"eslint-plugin-react-refresh": "^0.4.20",
|
|
53
|
-
"globals": "^16.3.0",
|
|
54
|
-
"prettier": "^3.6.2",
|
|
55
|
-
"sass-embedded": "^1.91.0",
|
|
56
|
-
"typescript": "~5.8.3",
|
|
57
|
-
"typescript-eslint": "^8.39.1",
|
|
58
|
-
"unplugin-dts": "^1.0.0-beta.0",
|
|
59
|
-
"vite": "^7.1.2"
|
|
17
|
+
"@types/react": "^19.2.2",
|
|
18
|
+
"@types/react-icons": "^2.2.7",
|
|
19
|
+
"typescript": "^5.9.3"
|
|
20
|
+
},
|
|
21
|
+
"dependencies": {
|
|
22
|
+
"react": "^19.2.0",
|
|
23
|
+
"react-icons": "^5.5.0"
|
|
60
24
|
}
|
|
61
25
|
}
|
package/types/plugin.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { IconType } from "react-icons";
|
|
2
|
+
import React from "react";
|
|
2
3
|
export declare const reactIcons: {
|
|
3
4
|
default: typeof import("react-icons/gi");
|
|
4
5
|
Gi3dGlasses: IconType;
|
|
@@ -9997,7 +9998,7 @@ export declare const reactIcons: {
|
|
|
9997
9998
|
export type ReactIcons = typeof reactIcons;
|
|
9998
9999
|
export type RenderContext = {
|
|
9999
10000
|
objectUrl: string;
|
|
10000
|
-
React: typeof
|
|
10001
|
+
React: typeof React;
|
|
10001
10002
|
};
|
|
10002
10003
|
export type DiashowContext = RenderContext & {
|
|
10003
10004
|
nextDocument: () => void;
|
package/README.md
DELETED
|
@@ -1,186 +0,0 @@
|
|
|
1
|
-
# Mediaserver Frontend
|
|
2
|
-
|
|
3
|
-
## Usage
|
|
4
|
-
|
|
5
|
-
The recommended way to use this software is using Docker:
|
|
6
|
-
|
|
7
|
-
```yml
|
|
8
|
-
services:
|
|
9
|
-
server:
|
|
10
|
-
image: treelabmediaserver/mediaserver-backend:stable
|
|
11
|
-
depends_on:
|
|
12
|
-
postgres:
|
|
13
|
-
condition: service_healthy
|
|
14
|
-
redis:
|
|
15
|
-
condition: service_healthy
|
|
16
|
-
restart: always
|
|
17
|
-
environment:
|
|
18
|
-
POSTGRES_HOST: postgres
|
|
19
|
-
REDIS_HOST: redis
|
|
20
|
-
DOCUMENT_STORE_CONFIG_PATH: /config.json
|
|
21
|
-
volumes:
|
|
22
|
-
- /my-partition:/store-0
|
|
23
|
-
- /tmp:/tmp
|
|
24
|
-
- ./documentStoreConfig.json:/config.json
|
|
25
|
-
ports:
|
|
26
|
-
- ${BACKEND_PORT}:${BACKEND_PORT}
|
|
27
|
-
- ${WEBSOCKET_PORT}:${WEBSOCKET_PORT}
|
|
28
|
-
healthcheck:
|
|
29
|
-
test: ["CMD", "curl", "-f", "http://localhost:${BACKEND_PORT}/health"]
|
|
30
|
-
interval: 30s
|
|
31
|
-
timeout: 5s
|
|
32
|
-
retries: 3
|
|
33
|
-
|
|
34
|
-
postgres:
|
|
35
|
-
image: postgres:16
|
|
36
|
-
healthcheck:
|
|
37
|
-
test: ["CMD", "pg_isready", "-U", "dev"]
|
|
38
|
-
interval: 5s
|
|
39
|
-
timeout: 5s
|
|
40
|
-
retries: 5
|
|
41
|
-
restart: always
|
|
42
|
-
volumes:
|
|
43
|
-
- postgres_data:/var/lib/postgresql/data
|
|
44
|
-
|
|
45
|
-
redis:
|
|
46
|
-
image: redis:latest
|
|
47
|
-
healthcheck:
|
|
48
|
-
test: ["CMD", "redis-cli", "ping"]
|
|
49
|
-
interval: 5s
|
|
50
|
-
timeout: 5s
|
|
51
|
-
retries: 5
|
|
52
|
-
restart: always
|
|
53
|
-
volumes:
|
|
54
|
-
- redis_data:/data
|
|
55
|
-
|
|
56
|
-
frontend:
|
|
57
|
-
image: treelabmediaserver/mediaserver-web:stable
|
|
58
|
-
depends_on:
|
|
59
|
-
server:
|
|
60
|
-
condition: service_healthy
|
|
61
|
-
restart: always
|
|
62
|
-
environment:
|
|
63
|
-
MEDIASERVER_BACKEND_URL: "http://${BACKEND_URL}:${BACKEND_PORT}"
|
|
64
|
-
MEDIASERVER_WEBSOCKET_URL: "ws://${BACKEND_URL}:${WEBSOCKET_PORT}"
|
|
65
|
-
ports:
|
|
66
|
-
- 80:80
|
|
67
|
-
|
|
68
|
-
volumes:
|
|
69
|
-
postgres_data:
|
|
70
|
-
redis_data:
|
|
71
|
-
```
|
|
72
|
-
|
|
73
|
-
with a corresponding `.env` file
|
|
74
|
-
|
|
75
|
-
```sh
|
|
76
|
-
BACKEND_URL=<your-url>
|
|
77
|
-
BACKEND_PORT=8080
|
|
78
|
-
WEBSOCKET_PORT=8081
|
|
79
|
-
|
|
80
|
-
POSTGRES_PORT=5432
|
|
81
|
-
POSTGRES_DB=mediaserver
|
|
82
|
-
POSTGRES_USER=<your-user>
|
|
83
|
-
POSTGRES_PASSWORD=<your-password>
|
|
84
|
-
|
|
85
|
-
REDIS_ENDPOINT=redis
|
|
86
|
-
REDIS_PORT=6379
|
|
87
|
-
REDIS_USERNAME=<your-user>
|
|
88
|
-
REDIS_PASSWORD=<your-password>
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
## Translations
|
|
92
|
-
|
|
93
|
-
You can install additional installations by creating a custom `manifest.json` and copying your translation into the container.
|
|
94
|
-
|
|
95
|
-
```yml
|
|
96
|
-
services:
|
|
97
|
-
frontend:
|
|
98
|
-
image: treelabmediaserver/mediaserver-web
|
|
99
|
-
volumes:
|
|
100
|
-
- ./manifest.json:/var/www/html/manifest.json
|
|
101
|
-
- ./fr.json:/var/www/html/translations/fr.json
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
Your manifest could look like this:
|
|
105
|
-
```json
|
|
106
|
-
{
|
|
107
|
-
"plugins": [],
|
|
108
|
-
"translations": [
|
|
109
|
-
{
|
|
110
|
-
"lang": "fr",
|
|
111
|
-
"path": "/translations/fr.json",
|
|
112
|
-
"name": "French",
|
|
113
|
-
"localName": "Français",
|
|
114
|
-
"flag": "🇫🇷"
|
|
115
|
-
},
|
|
116
|
-
{
|
|
117
|
-
"lang": "it",
|
|
118
|
-
"path": "https://some-cdn.net/mediaserver/it.json",
|
|
119
|
-
"name": "Italian",
|
|
120
|
-
"localName": "Italiano",
|
|
121
|
-
"flag": "🇮🇹"
|
|
122
|
-
}
|
|
123
|
-
]
|
|
124
|
-
}
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
I am not going to support other languages other than english and german out of the box, since I cannot maintain other languages and I don't want some locales to be in a broken state.
|
|
128
|
-
|
|
129
|
-
## Plugins
|
|
130
|
-
|
|
131
|
-
Installing plugins works similar to installing language extensions. You need to update your manifest.json and copy the plugin JS file into your docker container:
|
|
132
|
-
|
|
133
|
-
```yml
|
|
134
|
-
services:
|
|
135
|
-
frontend:
|
|
136
|
-
image: treelabmediaserver/mediaserver-web
|
|
137
|
-
volumes:
|
|
138
|
-
- ./manifest.json:/var/www/html/manifest.json
|
|
139
|
-
- ./fr.json:/var/www/html/translations/fr.json
|
|
140
|
-
- ./csvPlugin.js:/var/www/html/plugins/csvPlugin.js
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
Your manifest could look like this:
|
|
144
|
-
|
|
145
|
-
```json
|
|
146
|
-
{
|
|
147
|
-
"plugins": [
|
|
148
|
-
{
|
|
149
|
-
"name": "csv-plugin",
|
|
150
|
-
"url": "/plugins/csvPlugin.js",
|
|
151
|
-
},
|
|
152
|
-
{
|
|
153
|
-
"name": "plain-plugin",
|
|
154
|
-
"url": "https://some-cdn.net/mediaserver/plainPlugin.js",
|
|
155
|
-
}
|
|
156
|
-
],
|
|
157
|
-
"translations": [
|
|
158
|
-
{
|
|
159
|
-
"lang": "fr",
|
|
160
|
-
"path": "/translations/fr.json",
|
|
161
|
-
"name": "French",
|
|
162
|
-
"localName": "Français",
|
|
163
|
-
"flag": "🇫🇷"
|
|
164
|
-
}
|
|
165
|
-
]
|
|
166
|
-
}
|
|
167
|
-
```
|
|
168
|
-
|
|
169
|
-
## Developing plugins
|
|
170
|
-
|
|
171
|
-
Plugins need to export a default object that implements the `FileTypePlugin` interface. The `csvPlugin.js` plugin could look like this:
|
|
172
|
-
|
|
173
|
-
```js
|
|
174
|
-
const csvPlugin = {
|
|
175
|
-
matcher: (type) => type === "text/csv",
|
|
176
|
-
icon: (icons) => icons.FaFileCsv,
|
|
177
|
-
Render: (context) => (
|
|
178
|
-
// ...
|
|
179
|
-
),
|
|
180
|
-
Diashow: (context) => {
|
|
181
|
-
// ...
|
|
182
|
-
},
|
|
183
|
-
};
|
|
184
|
-
|
|
185
|
-
export default csvPlugin;
|
|
186
|
-
```
|