Stuff stuff stuff #44

Merged
PouuleT merged 24 commits from update-node into master 2021-08-30 12:59:08 +00:00
5 changed files with 34 additions and 27 deletions
Showing only changes of commit c6638376b6 - Show all commits

View File

@ -1,14 +1,14 @@
import React from "react"; import React from "react";
import moment from "moment";
import PropTypes from "prop-types"; import PropTypes from "prop-types";
import { useSelector } from "react-redux"; import { useSelector } from "react-redux";
import { format } from "timeago.js";
import { UserEdit } from "./userEdit"; import { UserEdit } from "./userEdit";
export const User = ({ id }) => { export const User = ({ id }) => {
const user = useSelector((state) => state.admin.users.get(id)); const user = useSelector((state) => state.admin.users.get(id));
const polochon = user.polochon; const polochon = user.polochon;
const lastSeen = moment(user.last_seen, "YYYY-MM-DDTHH:mm:ss.SZ"); const lastSeen = new Date(user.last_seen);
return ( return (
<tr> <tr>
@ -33,7 +33,7 @@ export const User = ({ id }) => {
} }
></span> ></span>
</td> </td>
<td>{lastSeen.isValid() ? lastSeen.fromNow() : "-"}</td> <td>{isNaN(lastSeen) ? "-" : format(lastSeen)}</td>
<td> <td>
<UserEdit id={id} /> <UserEdit id={id} />
</td> </td>

View File

@ -1,21 +1,26 @@
import React from "react"; import React from "react";
import PropTypes from "prop-types"; import PropTypes from "prop-types";
import moment from "moment"; import { format } from "timeago.js";
const prettyDate = (input) => { const prettyDate = (input) => {
if (typeof input !== "string" || input === "") { if (typeof input !== "string" || input === "") {
return input; return input;
} }
const date = moment(input, "YYYY-MM-DD HH:mm:ss Z"); const date = new Date(input);
if (!date.isValid()) { if (isNaN(date)) {
return ""; 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")) { const now = new Date();
output += " (" + date.fromNow() + ")"; const days = Math.abs((now - date) / (24 * 60 * 60 * 1000));
if (days < 31) {
output += ` (${format(date)})`;
} }
return output; return output;

View File

@ -2,7 +2,7 @@ import React, { useEffect } from "react";
import PropTypes from "prop-types"; import PropTypes from "prop-types";
import { useDispatch, useSelector } from "react-redux"; import { useDispatch, useSelector } from "react-redux";
import { UAParser } from "ua-parser-js"; import { UAParser } from "ua-parser-js";
import moment from "moment"; import { format } from "timeago.js";
import { getUserTokens, deleteUserToken } from "../../actions/users"; import { getUserTokens, deleteUserToken } from "../../actions/users";
@ -27,6 +27,9 @@ export const UserTokens = () => {
const Token = ({ token }) => { const Token = ({ token }) => {
const ua = UAParser(token.user_agent); const ua = UAParser(token.user_agent);
const lastUsed = new Date(token.last_used);
const createdAt = new Date(token.created_at);
return ( return (
<div className="card mt-3"> <div className="card mt-3">
<div className="card-header"> <div className="card-header">
@ -39,8 +42,8 @@ const Token = ({ token }) => {
<div className="card-body row"> <div className="card-body row">
<div className="col-12 col-md-6"> <div className="col-12 col-md-6">
<p>Last IP: {token.ip}</p> <p>Last IP: {token.ip}</p>
<p>Last used: {moment(token.last_used).fromNow()}</p> <p>Last used: {isNaN(lastUsed) ? "-" : format(lastUsed)}</p>
<p>Created: {moment(token.created_at).fromNow()}</p> <p>Created: {isNaN(createdAt) ? "-" : format(createdAt)}</p>
</div> </div>
<div className="col-12 col-md-6"> <div className="col-12 col-md-6">
<p> <p>

View File

@ -14,7 +14,6 @@
"immer": "^9.0.5", "immer": "^9.0.5",
"jquery": "^3.6.0", "jquery": "^3.6.0",
"jwt-decode": "^3.1.2", "jwt-decode": "^3.1.2",
"moment": "^2.29.1",
"popper.js": "^1.15.0", "popper.js": "^1.15.0",
"prop-types": "^15.7.2", "prop-types": "^15.7.2",
"react": "^17.0.2", "react": "^17.0.2",
@ -54,6 +53,7 @@
"sass": "^1.37.5", "sass": "^1.37.5",
"sass-loader": "^12.1.0", "sass-loader": "^12.1.0",
"style-loader": "^3.2.1", "style-loader": "^3.2.1",
"timeago.js": "^4.0.2",
"universal-cookie": "^4.0.4", "universal-cookie": "^4.0.4",
"webpack": "^5.50.0", "webpack": "^5.50.0",
"webpack-cli": "^4.7.2", "webpack-cli": "^4.7.2",
@ -6138,14 +6138,6 @@
"mkdirp": "bin/cmd.js" "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": { "node_modules/ms": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@ -8270,6 +8262,12 @@
"node": ">=8" "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": { "node_modules/timm": {
"version": "1.7.1", "version": "1.7.1",
"resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz",
@ -13691,11 +13689,6 @@
"minimist": "^1.2.5" "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": { "ms": {
"version": "2.1.2", "version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "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", "resolved": "https://registry.npmjs.org/throttle-debounce/-/throttle-debounce-2.3.0.tgz",
"integrity": "sha512-H7oLPV0P7+jgvrk+6mwwwBDmxTaxnu9HMXmloNLXwnNO0ZxZ31Orah2n8lU1eMPvsaowP2CX+USCgyovXfdOFQ==" "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": { "timm": {
"version": "1.7.1", "version": "1.7.1",
"resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz",

View File

@ -14,7 +14,6 @@
"immer": "^9.0.5", "immer": "^9.0.5",
"jquery": "^3.6.0", "jquery": "^3.6.0",
"jwt-decode": "^3.1.2", "jwt-decode": "^3.1.2",
"moment": "^2.29.1",
"popper.js": "^1.15.0", "popper.js": "^1.15.0",
"prop-types": "^15.7.2", "prop-types": "^15.7.2",
"react": "^17.0.2", "react": "^17.0.2",
@ -54,6 +53,7 @@
"sass": "^1.37.5", "sass": "^1.37.5",
"sass-loader": "^12.1.0", "sass-loader": "^12.1.0",
"style-loader": "^3.2.1", "style-loader": "^3.2.1",
"timeago.js": "^4.0.2",
"universal-cookie": "^4.0.4", "universal-cookie": "^4.0.4",
"webpack": "^5.50.0", "webpack": "^5.50.0",
"webpack-cli": "^4.7.2", "webpack-cli": "^4.7.2",