fix: Add Portugese, Brazil to language options (#2164)

* Add Portugese, Brazil to language options

* Upgrade date-fns package

Co-authored-by: Tom Moor <tom.moor@gmail.com>
This commit is contained in:
Saumya Pandey
2021-06-10 06:12:14 +05:30
committed by GitHub
parent a99f6bed42
commit a6d4d4ea36
27 changed files with 85 additions and 70 deletions

View File

@ -1,5 +1,5 @@
// @flow
import format from "date-fns/format";
import { format } from "date-fns";
import * as React from "react";
import { NavLink } from "react-router-dom";
import styled, { withTheme } from "styled-components";
@ -37,7 +37,7 @@ class RevisionListItem extends React.Component<Props> {
</Author>
<Meta>
<Time dateTime={revision.createdAt} tooltipDelay={250}>
{format(revision.createdAt, "MMMM Do, YYYY h:mm a")}
{format(Date.parse(revision.createdAt), "MMMM do, yyyy h:mm a")}
</Time>
</Meta>
{showMenu && (

View File

@ -1,5 +1,5 @@
// @flow
import distanceInWordsToNow from "date-fns/distance_in_words_to_now";
import { formatDistanceToNow } from "date-fns";
import { sortBy } from "lodash";
import { observer } from "mobx-react";
import * as React from "react";
@ -55,7 +55,7 @@ function DocumentViews({ document, isOpen }: Props) {
? t("Currently editing")
: t("Currently viewing")
: t("Viewed {{ timeAgo }} ago", {
timeAgo: distanceInWordsToNow(
timeAgo: formatDistanceToNow(
view ? new Date(view.lastViewedAt) : new Date()
),
});

View File

@ -1,20 +1,21 @@
// @flow
import distanceInWordsToNow from "date-fns/distance_in_words_to_now";
import format from "date-fns/format";
import { format, formatDistanceToNow } from "date-fns";
import { enUS, de, fr, es, it, ko, ptBR, pt, zhCN, ru } from "date-fns/locale";
import * as React from "react";
import Tooltip from "components/Tooltip";
import useUserLocale from "hooks/useUserLocale";
const locales = {
en: require(`date-fns/locale/en`),
de: require(`date-fns/locale/de`),
es: require(`date-fns/locale/es`),
fr: require(`date-fns/locale/fr`),
it: require(`date-fns/locale/it`),
ko: require(`date-fns/locale/ko`),
pt: require(`date-fns/locale/pt`),
zh: require(`date-fns/locale/zh_cn`),
ru: require(`date-fns/locale/ru`),
en_US: enUS,
de_DE: de,
es_ES: es,
fr_FR: fr,
it_IT: it,
ko_KR: ko,
pt_BR: ptBR,
pt_PT: pt,
zh_CN: zhCN,
ru_RU: ru,
};
let callbacks = [];
@ -64,7 +65,7 @@ function LocaleTime({
};
}, []);
let content = distanceInWordsToNow(dateTime, {
let content = formatDistanceToNow(Date.parse(dateTime), {
addSuffix,
locale: userLocale ? locales[userLocale] : undefined,
});
@ -78,7 +79,7 @@ function LocaleTime({
return (
<Tooltip
tooltip={format(dateTime, "MMMM Do, YYYY h:mm a")}
tooltip={format(Date.parse(dateTime), "MMMM do, yyyy h:mm a")}
delay={tooltipDelay}
placement="bottom"
>

View File

@ -1,5 +1,5 @@
// @flow
import distanceInWordsToNow from "date-fns/distance_in_words_to_now";
import { formatDistanceToNow } from "date-fns";
import * as React from "react";
const LocaleTime = React.lazy(() =>
@ -15,7 +15,7 @@ type Props = {
};
function Time(props: Props) {
let content = distanceInWordsToNow(props.dateTime, {
let content = formatDistanceToNow(Date.parse(props.dateTime), {
addSuffix: props.addSuffix,
});

View File

@ -8,5 +8,5 @@ export default function useUserLocale() {
return undefined;
}
return auth.user.language.split("_")[0];
return auth.user.language;
}

View File

@ -1,6 +1,5 @@
// @flow
import addDays from "date-fns/add_days";
import differenceInDays from "date-fns/difference_in_days";
import { addDays, differenceInDays } from "date-fns";
import invariant from "invariant";
import { action, computed, observable, set } from "mobx";
import parseTitle from "shared/utils/parseTitle";

View File

@ -3,7 +3,6 @@ import * as React from "react";
import { Switch, Redirect, type Match } from "react-router-dom";
import Archive from "scenes/Archive";
import Collection from "scenes/Collection";
import KeyedDocument from "scenes/Document/KeyedDocument";
import DocumentNew from "scenes/DocumentNew";
import Drafts from "scenes/Drafts";
import Error404 from "scenes/Error404";
@ -23,7 +22,11 @@ import { matchDocumentSlug as slug } from "utils/routeHelpers";
const SettingsRoutes = React.lazy(() =>
import(/* webpackChunkName: "settings" */ "./settings")
);
const KeyedDocument = React.lazy(() =>
import(
/* webpackChunkName: "keyed-document" */ "scenes/Document/KeyedDocument"
)
);
const NotFound = () => <Search notFound />;
const RedirectDocument = ({ match }: { match: Match }) => (
<Redirect

View File

@ -1,5 +1,5 @@
// @flow
import distanceInWordsToNow from "date-fns/distance_in_words_to_now";
import { formatDistanceToNow } from "date-fns";
import invariant from "invariant";
import { deburr, sortBy } from "lodash";
import { observable } from "mobx";
@ -94,8 +94,11 @@ class DataLoader extends React.Component<Props> {
// search for exact internal document
const slug = parseDocumentSlug(term);
try {
const { document } = await this.props.documents.fetch(slug);
const time = distanceInWordsToNow(document.updatedAt, {
const {
document,
}: { document: Document } = await this.props.documents.fetch(slug);
const time = formatDistanceToNow(Date.parse(document.updatedAt), {
addSuffix: true,
});
return [
@ -118,7 +121,7 @@ class DataLoader extends React.Component<Props> {
return sortBy(
results.map((document) => {
const time = distanceInWordsToNow(document.updatedAt, {
const time = formatDistanceToNow(document.updatedAt, {
addSuffix: true,
});
return {

View File

@ -1,5 +1,5 @@
// @flow
import distanceInWordsToNow from "date-fns/distance_in_words_to_now";
import { formatDistanceToNow } from "date-fns";
import invariant from "invariant";
import { observer } from "mobx-react";
import { GlobeIcon, PadlockIcon } from "outline-icons";
@ -118,9 +118,12 @@ function SharePopover({ document, share, sharedParent, onSubmit }: Props) {
<>
.{" "}
{t("The shared link was last accessed {{ timeAgo }}.", {
timeAgo: distanceInWordsToNow(share.lastAccessedAt, {
timeAgo: formatDistanceToNow(
Date.parse(share.lastAccessedAt),
{
addSuffix: true,
}),
}
),
})}
</>
)}

View File

@ -1,5 +1,5 @@
// @flow
import distanceInWordsToNow from "date-fns/distance_in_words_to_now";
import { formatDistanceToNow } from "date-fns";
import { observer } from "mobx-react";
import { EditIcon } from "outline-icons";
import * as React from "react";
@ -52,7 +52,7 @@ function UserProfile(props: Props) {
? t("Joined")
: t("Invited")}{" "}
{t("{{ time }} ago.", {
time: distanceInWordsToNow(new Date(user.createdAt)),
time: formatDistanceToNow(new Date(user.createdAt)),
})}
{user.isAdmin && (
<StyledBadge primary={user.isAdmin}>{t("Admin")}</StyledBadge>

View File

@ -92,7 +92,7 @@
"compressorjs": "^1.0.7",
"copy-to-clipboard": "^3.0.6",
"core-js": "^3.10.2",
"date-fns": "1.29.0",
"date-fns": "2.22.1",
"dd-trace": "^0.32.2",
"debug": "^4.1.1",
"dotenv": "^4.0.0",

View File

@ -1,5 +1,5 @@
// @flow
import format from "date-fns/format";
import { format } from "date-fns";
import Router from "koa-router";
import { v4 as uuidv4 } from "uuid";
import { NotFoundError } from "../errors";
@ -39,7 +39,7 @@ router.post("attachments.create", auth(), async (ctx) => {
const bucket = acl === "public-read" ? "public" : "uploads";
const key = `${bucket}/${user.id}/${s3Key}/${name}`;
const credential = makeCredential();
const longDate = format(new Date(), "YYYYMMDDTHHmmss\\Z");
const longDate = format(new Date(), "yyyyMMdd'T'HHmmss'Z'");
const policy = makePolicy(credential, longDate, acl, contentType);
const endpoint = publicS3Endpoint();
const url = `${endpoint}/${key}`;

View File

@ -1,5 +1,5 @@
// @flow
import subDays from "date-fns/sub_days";
import { subDays } from "date-fns";
import debug from "debug";
import Router from "koa-router";
import { AuthenticationError } from "../errors";

View File

@ -1,5 +1,5 @@
/* eslint-disable flowtype/require-valid-file-annotation */
import subDays from "date-fns/sub_days";
import { subDays } from "date-fns";
import TestServer from "fetch-test-server";
import app from "../app";
import { Attachment, Document } from "../models";

View File

@ -1,6 +1,6 @@
// @flow
import passport from "@outlinewiki/koa-passport";
import addMonths from "date-fns/add_months";
import { addMonths } from "date-fns";
import debug from "debug";
import Koa from "koa";
import bodyParser from "koa-body";

View File

@ -1,5 +1,5 @@
// @flow
import subMinutes from "date-fns/sub_minutes";
import { subMinutes } from "date-fns";
import Router from "koa-router";
import { find } from "lodash";
import { AuthorizationError } from "../../errors";

View File

@ -1,7 +1,6 @@
// @flow
import crypto from "crypto";
import addMinutes from "date-fns/add_minutes";
import subMinutes from "date-fns/sub_minutes";
import { addMinutes, subMinutes } from "date-fns";
import JWT from "jsonwebtoken";
import { v4 as uuidv4 } from "uuid";
import { languages } from "../../shared/i18n";

View File

@ -1,5 +1,5 @@
// @flow
import subMilliseconds from "date-fns/sub_milliseconds";
import { subMilliseconds } from "date-fns";
import { USER_PRESENCE_INTERVAL } from "../../shared/constants";
import { User } from "../models";
import { DataTypes, Op, sequelize } from "../sequelize";

View File

@ -1,5 +1,5 @@
// @flow
import subHours from "date-fns/sub_hours";
import { subHours } from "date-fns";
import type { Event } from "../events";
import { socketio } from "../main";
import {

View File

@ -1,7 +1,7 @@
// @flow
import querystring from "querystring";
import * as Sentry from "@sentry/node";
import addMonths from "date-fns/add_months";
import { addMonths } from "date-fns";
import { type Context } from "koa";
import { pick } from "lodash";
import { User, Event, Team } from "../models";

View File

@ -1,5 +1,5 @@
// @flow
import subMinutes from "date-fns/sub_minutes";
import { subMinutes } from "date-fns";
import JWT from "jsonwebtoken";
import { AuthenticationError } from "../errors";
import { Team, User } from "../models";

View File

@ -1,6 +1,5 @@
// @flow
import addMinutes from "date-fns/add_minutes";
import subMinutes from "date-fns/sub_minutes";
import { addMinutes, subMinutes } from "date-fns";
import { type Request } from "koa";
import { OAuthStateMismatchError } from "../errors";
import { getCookieDomain } from "./domains";

View File

@ -2,8 +2,7 @@
import crypto from "crypto";
import * as Sentry from "@sentry/node";
import AWS from "aws-sdk";
import addHours from "date-fns/add_hours";
import format from "date-fns/format";
import { addHours, format } from "date-fns";
import fetch from "fetch-with-proxy";
const AWS_SECRET_ACCESS_KEY = process.env.AWS_SECRET_ACCESS_KEY;
@ -36,7 +35,7 @@ export const makeCredential = () => {
const credential =
AWS_ACCESS_KEY_ID +
"/" +
format(new Date(), "YYYYMMDD") +
format(new Date(), "yyyyMMdd") +
"/" +
AWS_REGION +
"/s3/aws4_request";
@ -62,7 +61,7 @@ export const makePolicy = (
{ "x-amz-credential": credential },
{ "x-amz-date": longDate },
],
expiration: format(tomorrow, "YYYY-MM-DDTHH:mm:ss\\Z"),
expiration: format(tomorrow, "yyyy-MM-dd'T'HH:mm:ss'Z'"),
};
return Buffer.from(JSON.stringify(policy)).toString("base64");
@ -71,7 +70,7 @@ export const makePolicy = (
export const getSignature = (policy: any) => {
const kDate = hmac(
"AWS4" + AWS_SECRET_ACCESS_KEY,
format(new Date(), "YYYYMMDD")
format(new Date(), "yyyyMMdd")
);
const kRegion = hmac(kDate, AWS_REGION);
const kService = hmac(kRegion, "s3");

View File

@ -13,6 +13,7 @@ export const languageOptions = [
{ label: "Français (France)", value: "fr_FR" },
{ label: "Italiano (Italia)", value: "it_IT" },
{ label: "한국어 (Korean)", value: "ko_KR" },
{ label: "Português (Brazil)", value: "pt_BR" },
{ label: "Português (Portugal)", value: "pt_PT" },
{ label: "Pусский (Россия)", value: "ru_RU" },
];

View File

@ -1,8 +1,5 @@
// @flow
import subDays from "date-fns/sub_days";
import subMonth from "date-fns/sub_months";
import subWeek from "date-fns/sub_weeks";
import subYear from "date-fns/sub_years";
import { subDays, subMonths, subWeeks, subYears } from "date-fns";
export function subtractDate(
date: Date,
@ -12,11 +9,11 @@ export function subtractDate(
case "day":
return subDays(date, 1);
case "week":
return subWeek(date, 1);
return subWeeks(date, 1);
case "month":
return subMonth(date, 1);
return subMonths(date, 1);
case "year":
return subYear(date, 1);
return subYears(date, 1);
default:
return date;
}

View File

@ -99,13 +99,24 @@ module.exports = {
moduleIds: 'hashed',
chunkIds: 'named',
splitChunks: {
chunks: 'async',
minSize: 20000,
minChunks: 1,
maxAsyncRequests: 30,
maxInitialRequests: 30,
enforceSizeThreshold: 50000,
cacheGroups: {
vendor: {
defaultVendors: {
test: /[\\/]node_modules[\\/]/,
name: 'vendors',
chunks: 'initial',
},
},
priority: -10,
reuseExistingChunk: true,
},
default: {
minChunks: 2,
priority: -20,
reuseExistingChunk: true,
}
}
}
}
};

View File

@ -4381,10 +4381,10 @@ data-urls@^2.0.0:
whatwg-mimetype "^2.3.0"
whatwg-url "^8.0.0"
date-fns@1.29.0:
version "1.29.0"
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6"
integrity sha512-lbTXWZ6M20cWH8N9S6afb0SBm6tMk+uUg6z3MqHPKE9atmsY3kJkTm8vKe93izJ2B2+q5MV990sM2CHgtAZaOw==
date-fns@2.22.1:
version "2.22.1"
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.22.1.tgz#1e5af959831ebb1d82992bf67b765052d8f0efc4"
integrity sha512-yUFPQjrxEmIsMqlHhAhmxkuH769baF21Kk+nZwZGyrMoyLA+LugaQtC0+Tqf9CBUUULWwUJt6Q5ySI3LJDDCGg==
dd-trace@^0.32.2:
version "0.32.2"