Stuff stuff stuff #44
@ -1,14 +1,14 @@
|
||||
import React from "react";
|
||||
import moment from "moment";
|
||||
import PropTypes from "prop-types";
|
||||
import { useSelector } from "react-redux";
|
||||
import { format } from "timeago.js";
|
||||
|
||||
import { UserEdit } from "./userEdit";
|
||||
|
||||
export const User = ({ id }) => {
|
||||
const user = useSelector((state) => state.admin.users.get(id));
|
||||
const polochon = user.polochon;
|
||||
const lastSeen = moment(user.last_seen, "YYYY-MM-DDTHH:mm:ss.SZ");
|
||||
const lastSeen = new Date(user.last_seen);
|
||||
|
||||
return (
|
||||
<tr>
|
||||
@ -33,7 +33,7 @@ export const User = ({ id }) => {
|
||||
}
|
||||
></span>
|
||||
</td>
|
||||
<td>{lastSeen.isValid() ? lastSeen.fromNow() : "-"}</td>
|
||||
<td>{isNaN(lastSeen) ? "-" : format(lastSeen)}</td>
|
||||
<td>
|
||||
<UserEdit id={id} />
|
||||
</td>
|
||||
|
@ -1,21 +1,26 @@
|
||||
import React from "react";
|
||||
import PropTypes from "prop-types";
|
||||
import moment from "moment";
|
||||
import { format } from "timeago.js";
|
||||
|
||||
const prettyDate = (input) => {
|
||||
if (typeof input !== "string" || input === "") {
|
||||
return input;
|
||||
}
|
||||
|
||||
const date = moment(input, "YYYY-MM-DD HH:mm:ss Z");
|
||||
if (!date.isValid()) {
|
||||
const date = new Date(input);
|
||||
if (isNaN(date)) {
|
||||
return "";
|
||||
}
|
||||
|
||||
let output = date.format("DD/MM/YYYY");
|
||||
const dd = date.getDay().toString().padStart(2, "0");
|
||||
const mm = date.getMonth().toString().padStart(2, "0");
|
||||
const yyyy = date.getFullYear();
|
||||
let output = `${dd}/${mm}/${yyyy}`;
|
||||
|
||||
if (date > moment().subtract(1, "month") && date < moment().add(1, "month")) {
|
||||
output += " (" + date.fromNow() + ")";
|
||||
const now = new Date();
|
||||
const days = Math.abs((now - date) / (24 * 60 * 60 * 1000));
|
||||
if (days < 31) {
|
||||
output += ` (${format(date)})`;
|
||||
}
|
||||
|
||||
return output;
|
||||
|
@ -2,7 +2,7 @@ import React, { useEffect } from "react";
|
||||
import PropTypes from "prop-types";
|
||||
import { useDispatch, useSelector } from "react-redux";
|
||||
import { UAParser } from "ua-parser-js";
|
||||
import moment from "moment";
|
||||
import { format } from "timeago.js";
|
||||
|
||||
import { getUserTokens, deleteUserToken } from "../../actions/users";
|
||||
|
||||
@ -27,6 +27,9 @@ export const UserTokens = () => {
|
||||
|
||||
const Token = ({ token }) => {
|
||||
const ua = UAParser(token.user_agent);
|
||||
const lastUsed = new Date(token.last_used);
|
||||
const createdAt = new Date(token.created_at);
|
||||
|
||||
return (
|
||||
<div className="card mt-3">
|
||||
<div className="card-header">
|
||||
@ -39,8 +42,8 @@ const Token = ({ token }) => {
|
||||
<div className="card-body row">
|
||||
<div className="col-12 col-md-6">
|
||||
<p>Last IP: {token.ip}</p>
|
||||
<p>Last used: {moment(token.last_used).fromNow()}</p>
|
||||
<p>Created: {moment(token.created_at).fromNow()}</p>
|
||||
<p>Last used: {isNaN(lastUsed) ? "-" : format(lastUsed)}</p>
|
||||
<p>Created: {isNaN(createdAt) ? "-" : format(createdAt)}</p>
|
||||
</div>
|
||||
<div className="col-12 col-md-6">
|
||||
<p>
|
||||
|
27
frontend/package-lock.json
generated
27
frontend/package-lock.json
generated
@ -14,7 +14,6 @@
|
||||
"immer": "^9.0.5",
|
||||
"jquery": "^3.6.0",
|
||||
"jwt-decode": "^3.1.2",
|
||||
"moment": "^2.29.1",
|
||||
"popper.js": "^1.15.0",
|
||||
"prop-types": "^15.7.2",
|
||||
"react": "^17.0.2",
|
||||
@ -54,6 +53,7 @@
|
||||
"sass": "^1.37.5",
|
||||
"sass-loader": "^12.1.0",
|
||||
"style-loader": "^3.2.1",
|
||||
"timeago.js": "^4.0.2",
|
||||
"universal-cookie": "^4.0.4",
|
||||
"webpack": "^5.50.0",
|
||||
"webpack-cli": "^4.7.2",
|
||||
@ -6138,14 +6138,6 @@
|
||||
"mkdirp": "bin/cmd.js"
|
||||
}
|
||||
},
|
||||
"node_modules/moment": {
|
||||
"version": "2.29.1",
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
|
||||
"integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==",
|
||||
"engines": {
|
||||
"node": "*"
|
||||
}
|
||||
},
|
||||
"node_modules/ms": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
@ -8270,6 +8262,12 @@
|
||||
"node": ">=8"
|
||||
}
|
||||
},
|
||||
"node_modules/timeago.js": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/timeago.js/-/timeago.js-4.0.2.tgz",
|
||||
"integrity": "sha512-a7wPxPdVlQL7lqvitHGGRsofhdwtkoSXPGATFuSOA2i1ZNQEPLrGnj68vOp2sOJTCFAQVXPeNMX/GctBaO9L2w==",
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/timm": {
|
||||
"version": "1.7.1",
|
||||
"resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz",
|
||||
@ -13691,11 +13689,6 @@
|
||||
"minimist": "^1.2.5"
|
||||
}
|
||||
},
|
||||
"moment": {
|
||||
"version": "2.29.1",
|
||||
"resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz",
|
||||
"integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ=="
|
||||
},
|
||||
"ms": {
|
||||
"version": "2.1.2",
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
|
||||
@ -15306,6 +15299,12 @@
|
||||
"resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.3.0.tgz",
|
||||
"integrity": "sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ=="
|
||||
},
|
||||
"timeago.js": {
|
||||
"version": "4.0.2",
|
||||
"resolved": "https://registry.npmjs.org/timeago.js/-/timeago.js-4.0.2.tgz",
|
||||
"integrity": "sha512-a7wPxPdVlQL7lqvitHGGRsofhdwtkoSXPGATFuSOA2i1ZNQEPLrGnj68vOp2sOJTCFAQVXPeNMX/GctBaO9L2w==",
|
||||
"dev": true
|
||||
},
|
||||
"timm": {
|
||||
"version": "1.7.1",
|
||||
"resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz",
|
||||
|
@ -14,7 +14,6 @@
|
||||
"immer": "^9.0.5",
|
||||
"jquery": "^3.6.0",
|
||||
"jwt-decode": "^3.1.2",
|
||||
"moment": "^2.29.1",
|
||||
"popper.js": "^1.15.0",
|
||||
"prop-types": "^15.7.2",
|
||||
"react": "^17.0.2",
|
||||
@ -54,6 +53,7 @@
|
||||
"sass": "^1.37.5",
|
||||
"sass-loader": "^12.1.0",
|
||||
"style-loader": "^3.2.1",
|
||||
"timeago.js": "^4.0.2",
|
||||
"universal-cookie": "^4.0.4",
|
||||
"webpack": "^5.50.0",
|
||||
"webpack-cli": "^4.7.2",
|
||||
|
Loading…
x
Reference in New Issue
Block a user