{
"name": "lemmy-ui",
- "version": "0.18.0-rc.6",
+ "version": "0.18.0-rc.7",
"description": "An isomorphic UI for lemmy",
"repository": "https://github.com/LemmyNet/lemmy-ui",
"license": "AGPL-3.0",
"author": "Dessalines <tyhou13@gmx.com>",
"scripts": {
+ "analyze": "webpack --mode=none",
"prebuild:dev": "yarn clean && node generate_translations.js",
"build:dev": "webpack --mode=development",
"prebuild:prod": "yarn clean && node generate_translations.js",
"build:prod": "webpack --mode=production",
"clean": "yarn run rimraf dist",
- "dev": "yarn start",
+ "dev": "yarn build:dev --watch",
"lint": "yarn translations:generate && tsc --noEmit && eslint --report-unused-disable-directives --ext .js,.ts,.tsx \"src/**\" && prettier --check \"src/**/*.{ts,tsx,js,css,scss}\"",
"prepare": "husky install",
- "start": "yarn build:dev --watch",
"themes:build": "sass src/assets/css/themes/:src/assets/css/themes",
"themes:watch": "sass --watch src/assets/css/themes/:src/assets/css/themes",
"translations:generate": "node generate_translations.js",
"copy-webpack-plugin": "^11.0.0",
"cross-fetch": "^3.1.5",
"css-loader": "^6.7.3",
+ "date-fns": "^2.30.0",
"emoji-mart": "^5.4.0",
"emoji-short-name": "^2.0.0",
"express": "~4.18.2",
"markdown-it-sub": "^1.0.0",
"markdown-it-sup": "^1.0.0",
"mini-css-extract-plugin": "^2.7.5",
- "moment": "^2.29.4",
"register-service-worker": "^1.7.2",
"run-node-webpack-plugin": "^1.3.0",
"sanitize-html": "^2.10.0",
"@types/markdown-it": "^12.2.3",
"@types/markdown-it-container": "^2.0.5",
"@types/node": "^20.1.2",
+ "@types/path-browserify": "^1.0.0",
"@types/sanitize-html": "^2.9.0",
"@types/serialize-javascript": "^5.0.1",
"@types/toastify-js": "^1.11.1",
"style-loader": "^3.3.2",
"terser": "^5.17.3",
"typescript": "^5.0.4",
+ "webpack-bundle-analyzer": "^4.9.0",
"webpack-dev-server": "4.15.0"
},
"packageManager": "yarn@1.22.19",
import { amAdmin, amMod } from "@utils/roles";
import type { QueryParams } from "@utils/types";
import { Choice, RouteDataResponse } from "@utils/types";
+import formatDistanceToNowStrict from "date-fns/formatDistanceToNowStrict";
+import parseISO from "date-fns/parseISO";
import { NoOptionI18nKeys } from "i18next";
import { Component, linkEvent } from "inferno";
import { T } from "inferno-i18next-dess";
ModlogActionType,
Person,
} from "lemmy-js-client";
-import moment from "moment";
import { fetchLimit } from "../config";
import { InitialFetchRequest } from "../interfaces";
import { FirstLoadService, I18NextService } from "../services";
return action !== undefined ? (action as ModlogActionType) : "All";
}
+function getExpires(expires: string) {
+ return formatDistanceToNowStrict(parseISO(expires));
+}
+
const getModlogActionMapper =
(
actionType: ModlogActionType,
)}
{expires && (
<span>
- <div>expires: {moment.utc(expires).fromNow()}</div>
+ <div>expires: {getExpires(expires)}</div>
</span>
)}
</>
)}
{expires && (
<span>
- <div>expires: {moment.utc(expires).fromNow()}</div>
+ <div>expires: {getExpires(expires)}</div>
</span>
)}
</>
)}
{expires && (
<span>
- <div>expires: {moment.utc(expires).fromNow()}</div>
+ <div>expires: {getExpires(expires)}</div>
</span>
)}
</>
}
}
+ async componentDidMount() {
+ await this.refetch();
+ }
+
get combined() {
const res = this.state.res;
const combined = res.state == "success" ? buildCombined(res.data) : [];