Compare commits

..

No commits in common. "main" and "v0.2.0" have entirely different histories.
main ... v0.2.0

16 changed files with 29 additions and 48 deletions

3
.gitignore vendored
View File

@ -2,5 +2,4 @@ node_modules/
package-lock.json
build/
pnpm-lock.yaml
.vscode
.vercel
.vscode

View File

@ -4,12 +4,13 @@ WORKDIR /app
COPY ./package.json ./
RUN npm install
COPY ./ ./
ARG PUBLIC_API_URL=https://publitebackend.dm1sh.ru
ARG PUBLIC_BASE_URL=https://publite.dm1sh.ru
ENV SNOWPACK_PUBLIC_API_URL=https://publitebackend.dmitriy.icu
ENV SNOWPACK_PUBLIC_BASE_URL=https://publite.dmitriy.icu
RUN NODE_ENV=production npm run build
FROM node:alpine
RUN npm install serve -g --silent
WORKDIR /app
COPY --from=builder /app/build .
CMD serve -p ${PORT:-8080} -s .
EXPOSE 80
CMD ["serve", "-p", "80", "-s", "."]

View File

@ -8,20 +8,6 @@
Frontend for Publite service — E-Books reader
<table style="margin: auto">
<tr>
<td>
<img style="max-height: 50vh" src="public/images/screenshot3.webp"/>
</td>
<td>
<img style="max-height: 50vh" src="public/images/screenshot2.webp"/>
</td>
<td>
<img style="max-height: 50vh" src="public/images/screenshot1.webp"/>
</td>
</tr>
</table>
## Deploy
Dev environment setup:
@ -41,10 +27,10 @@ Simple docker deployment
```bash
# build docker image
docker build . --build-arg PUBLIC_API_URL=<https://...> --build-arg PUBLIC_BASE_URL=<https://...> -t publite_frontend
docker build . -t publite_frontend
# run it with docker
docker run -p <port>:8080 publite_frontend
docker run -p <port>:80 publite_frontend
```
Dokku deployment with image from Docker Hub

View File

@ -7,7 +7,7 @@
"h": "cat ./webpack.config.dev.js"
},
"devDependencies": {
"@svgr/webpack": "^6.3.1",
"@svgr/webpack": "^5.5.0",
"@types/react": "^17.0.15",
"@types/react-dom": "^17.0.9",
"copy-webpack-plugin": "^9.0.1",
@ -16,9 +16,10 @@
"fork-ts-checker-webpack-plugin": "^6.2.13",
"style-loader": "^3.2.1",
"typescript": "^4.3.5",
"typescript-plugin-css-modules": "^3.4.0",
"webpack": "^5.46.0",
"webpack-cli": "^4.7.2",
"webpack-dev-server": "^4.11.1"
"webpack-dev-server": "^3.11.2"
},
"dependencies": {
"idb": "^6.1.2",

Binary file not shown.

After

Width:  |  Height:  |  Size: 599 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 261 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 22 KiB

View File

@ -29,18 +29,18 @@
"description": "eBook reader supporting EPUB and FB2 files",
"screenshots": [
{
"src": "/images/screenshot1.webp",
"type": "image/webp",
"src": "/images/screenshot1.jpg",
"type": "image/jpg",
"sizes": "1080x2400"
},
{
"src": "/images/screenshot2.webp",
"type": "image/webp",
"src": "/images/screenshot2.jpg",
"type": "image/jpg",
"sizes": "1080x2400"
},
{
"src": "/images/screenshot3.webp",
"type": "image/webp",
"src": "/images/screenshot3.jpg",
"type": "image/jpg",
"sizes": "1080x2400"
}
]

View File

@ -23,11 +23,7 @@ export const UploadForm = ({ setLoading }: IPageProps) => {
}
} catch (err) {
setLoading(false);
if (err instanceof Error)
setError(err.message);
else
setError(String(err))
setError(err.message);
}
};

View File

@ -8,8 +8,8 @@ export const getHash = (path: string) => {
return path.substr("/book/".length, hashLength);
};
export const composeResponseStatus = (err: unknown): ResponseInit => {
if (err instanceof Error && err.name === "NetowrkError")
export const composeResponseStatus = (err: Error): ResponseInit => {
if (err.name === "NetowrkError")
return { status: 503, statusText: err.message };
else return { status: 500, statusText: "Something bad happened (IDK)" };
};

View File

@ -5,11 +5,6 @@ import { API_URL } from "~/constants";
export const validState = (file: File | undefined): file is File => {
if (!file) throw new Error("Book file is required. Please, attach one");
if (file.name.endsWith(".zip"))
throw new Error(
"Please, unzip file before sending to reader if it is fb2.zip"
)
if (!file.name.match(/\.(fb2|epub)/))
throw new Error(
"Wrong file type. Only FB2 and Epub files are supported. \
@ -39,9 +34,7 @@ export const submitFile = async (
return await res.json();
} catch (err) {
if (err instanceof Error)
console.error("Network error:", err.message);
console.error("Network error:", err.message);
throw err;
}
};

View File

@ -8,10 +8,11 @@ module.exports = {
mode: "development",
watchOptions: { ignored: /node_modules/ },
devServer: {
static: path.join(__dirname, "build"),
contentBase: path.join(__dirname, "build"),
compress: true,
port: 8080,
hot: false,
inline: false,
historyApiFallback: {
index: "index.html",
},
@ -19,8 +20,8 @@ module.exports = {
plugins: [
new webpack.DefinePlugin({
"process.env.NODE_ENV": JSON.stringify("development"),
"process.env.PUBLIC_API_URL": JSON.stringify("http://localhost:8081"),
"process.env.PUBLIC_BASE_URL": JSON.stringify("http://localhost:8080"),
"process.env.PUBLIC_API_URL": JSON.stringify("http://localhost:8081"),
}),
...webpackConfig.plugins,
],

View File

@ -12,8 +12,12 @@ module.exports = {
plugins: [
new webpack.DefinePlugin({
"process.env.NODE_ENV": JSON.stringify("production"),
"process.env.PUBLIC_API_URL": JSON.stringify(process.env.PUBLIC_API_URL),
"process.env.PUBLIC_BASE_URL": JSON.stringify(process.env.PUBLIC_BASE_URL),
"process.env.PUBLIC_BASE_URL": JSON.stringify(
"https://publite.dmitriy.icu"
),
"process.env.PUBLIC_API_URL": JSON.stringify(
"https://publitebackend.dmitriy.icu"
),
}),
...webpackConfig.plugins,
],