diff --git a/web/src/components/Note/index.tsx b/web/src/components/Note/index.tsx
index bff41fdc..13571a63 100644
--- a/web/src/components/Note/index.tsx
+++ b/web/src/components/Note/index.tsx
@@ -61,7 +61,7 @@ function useFetchData(
}, [dispatch, noteUUID, search]);
}
-const Note: React.SFC
= ({ match, location }) => {
+const Note: React.FunctionComponent = ({ match, location }) => {
const { params } = match;
const { noteUUID } = params;
diff --git a/web/src/components/PasswordReset/Confirm/Form.tsx b/web/src/components/PasswordReset/Confirm/Form.tsx
index 9b838c54..3bc4ff43 100644
--- a/web/src/components/PasswordReset/Confirm/Form.tsx
+++ b/web/src/components/PasswordReset/Confirm/Form.tsx
@@ -26,7 +26,7 @@ interface Props {
submitting: boolean;
}
-const PasswordResetConfirmForm: React.SFC = ({
+const PasswordResetConfirmForm: React.FunctionComponent = ({
onResetPassword,
submitting
}) => {
diff --git a/web/src/components/PasswordReset/Confirm/index.tsx b/web/src/components/PasswordReset/Confirm/index.tsx
index 8b4117cf..94c110d4 100644
--- a/web/src/components/PasswordReset/Confirm/index.tsx
+++ b/web/src/components/PasswordReset/Confirm/index.tsx
@@ -36,7 +36,7 @@ interface Match {
interface Props extends RouteComponentProps {}
-const PasswordResetConfirm: React.SFC = ({ match, history }) => {
+const PasswordResetConfirm: React.FunctionComponent = ({ match, history }) => {
const [errorMsg, setErrorMsg] = useState('');
const [submitting, setSubmitting] = useState(false);
const dispatch = useDispatch();
diff --git a/web/src/components/PasswordReset/Request/Form.tsx b/web/src/components/PasswordReset/Request/Form.tsx
index 1188e532..4bcc75b7 100644
--- a/web/src/components/PasswordReset/Request/Form.tsx
+++ b/web/src/components/PasswordReset/Request/Form.tsx
@@ -28,7 +28,7 @@ interface Props {
submitting: boolean;
}
-const PasswordResetRequestForm: React.SFC = ({
+const PasswordResetRequestForm: React.FunctionComponent = ({
onSubmit,
submitting
}) => {
diff --git a/web/src/components/PasswordReset/Request/index.tsx b/web/src/components/PasswordReset/Request/index.tsx
index 3459fcb2..ccaddab0 100644
--- a/web/src/components/PasswordReset/Request/index.tsx
+++ b/web/src/components/PasswordReset/Request/index.tsx
@@ -30,7 +30,7 @@ import styles from './Request.scss';
interface Props {}
-const PasswordResetRequest: React.SFC = () => {
+const PasswordResetRequest: React.FunctionComponent = () => {
const [errorMsg, setErrorMsg] = useState('');
const [submitting, setSubmitting] = useState(false);
const [processed, setProcessed] = useState(false);
diff --git a/web/src/components/Preferences/Repetitions/Content.tsx b/web/src/components/Preferences/Repetitions/Content.tsx
index 34ced491..3fad482c 100644
--- a/web/src/components/Preferences/Repetitions/Content.tsx
+++ b/web/src/components/Preferences/Repetitions/Content.tsx
@@ -30,7 +30,7 @@ interface Props {
token?: string;
}
-const Content: React.SFC = ({
+const Content: React.FunctionComponent = ({
data,
token,
setSuccessMsg,
diff --git a/web/src/components/Preferences/Repetitions/index.tsx b/web/src/components/Preferences/Repetitions/index.tsx
index 3c6de81a..28660286 100644
--- a/web/src/components/Preferences/Repetitions/index.tsx
+++ b/web/src/components/Preferences/Repetitions/index.tsx
@@ -36,7 +36,7 @@ interface Match {
}
interface Props extends RouteComponentProps {}
-const EmailPreferenceRepetition: React.SFC = ({ location, match }) => {
+const EmailPreferenceRepetition: React.FunctionComponent = ({ location, match }) => {
const [data, setData] = useState(null);
const [isFetching, setIsFetching] = useState(false);
const [successMsg, setSuccessMsg] = useState('');
diff --git a/web/src/components/Repetition/Edit/Content.tsx b/web/src/components/Repetition/Edit/Content.tsx
index ba3d88f0..bcfa2137 100644
--- a/web/src/components/Repetition/Edit/Content.tsx
+++ b/web/src/components/Repetition/Edit/Content.tsx
@@ -1,3 +1,21 @@
+/* Copyright (C) 2019 Monomax Software Pty Ltd
+ *
+ * This file is part of Dnote.
+ *
+ * Dnote is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Dnote is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Dnote. If not, see .
+ */
+
import React from 'react';
import { withRouter, RouteComponentProps } from 'react-router-dom';
@@ -14,7 +32,7 @@ interface Props extends RouteComponentProps {
data: RepetitionRuleData;
}
-const RepetitionEditContent: React.SFC = ({
+const RepetitionEditContent: React.FunctionComponent = ({
history,
setErrMsg,
data
diff --git a/web/src/components/Repetition/Edit/Repetition.scss b/web/src/components/Repetition/Edit/Repetition.scss
index e69de29b..b6fbbf94 100644
--- a/web/src/components/Repetition/Edit/Repetition.scss
+++ b/web/src/components/Repetition/Edit/Repetition.scss
@@ -0,0 +1,18 @@
+/* Copyright (C) 2019 Monomax Software Pty Ltd
+ *
+ * This file is part of Dnote.
+ *
+ * Dnote is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Dnote is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Dnote. If not, see .
+ */
+
diff --git a/web/src/components/Repetition/Edit/index.tsx b/web/src/components/Repetition/Edit/index.tsx
index 6ed2c3be..62461486 100644
--- a/web/src/components/Repetition/Edit/index.tsx
+++ b/web/src/components/Repetition/Edit/index.tsx
@@ -1,3 +1,21 @@
+/* Copyright (C) 2019 Monomax Software Pty Ltd
+ *
+ * This file is part of Dnote.
+ *
+ * Dnote is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Dnote is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Dnote. If not, see .
+ */
+
import React, { useState, useEffect } from 'react';
import Helmet from 'react-helmet';
import { Link, withRouter, RouteComponentProps } from 'react-router-dom';
diff --git a/web/src/components/Repetition/New/Repetition.scss b/web/src/components/Repetition/New/Repetition.scss
index e69de29b..b6fbbf94 100644
--- a/web/src/components/Repetition/New/Repetition.scss
+++ b/web/src/components/Repetition/New/Repetition.scss
@@ -0,0 +1,18 @@
+/* Copyright (C) 2019 Monomax Software Pty Ltd
+ *
+ * This file is part of Dnote.
+ *
+ * Dnote is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Dnote is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Dnote. If not, see .
+ */
+
diff --git a/web/src/components/Repetition/New/index.tsx b/web/src/components/Repetition/New/index.tsx
index 5f8ebea0..696f2ca1 100644
--- a/web/src/components/Repetition/New/index.tsx
+++ b/web/src/components/Repetition/New/index.tsx
@@ -1,3 +1,21 @@
+/* Copyright (C) 2019 Monomax Software Pty Ltd
+ *
+ * This file is part of Dnote.
+ *
+ * Dnote is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Dnote is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Dnote. If not, see .
+ */
+
import React, { useState, useEffect } from 'react';
import Helmet from 'react-helmet';
import { Link, withRouter, RouteComponentProps } from 'react-router-dom';
diff --git a/web/src/components/Repetition/RepetitionItem/BookMeta.tsx b/web/src/components/Repetition/RepetitionItem/BookMeta.tsx
index 8aaffc30..1368a7f1 100644
--- a/web/src/components/Repetition/RepetitionItem/BookMeta.tsx
+++ b/web/src/components/Repetition/RepetitionItem/BookMeta.tsx
@@ -1,3 +1,21 @@
+/* Copyright (C) 2019 Monomax Software Pty Ltd
+ *
+ * This file is part of Dnote.
+ *
+ * Dnote is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Dnote is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Dnote. If not, see .
+ */
+
import React from 'react';
import { BookDomain } from 'jslib/operations/types';
diff --git a/web/src/components/Repetition/RepetitionItem/index.tsx b/web/src/components/Repetition/RepetitionItem/index.tsx
index 2b95f855..1ea4f6d6 100644
--- a/web/src/components/Repetition/RepetitionItem/index.tsx
+++ b/web/src/components/Repetition/RepetitionItem/index.tsx
@@ -1,3 +1,21 @@
+/* Copyright (C) 2019 Monomax Software Pty Ltd
+ *
+ * This file is part of Dnote.
+ *
+ * Dnote is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Dnote is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Dnote. If not, see .
+ */
+
import React, { useState } from 'react';
import classnames from 'classnames';
diff --git a/web/src/components/Repetition/RepetitionList.tsx b/web/src/components/Repetition/RepetitionList.tsx
index ba849b05..c4997dea 100644
--- a/web/src/components/Repetition/RepetitionList.tsx
+++ b/web/src/components/Repetition/RepetitionList.tsx
@@ -1,3 +1,21 @@
+/* Copyright (C) 2019 Monomax Software Pty Ltd
+ *
+ * This file is part of Dnote.
+ *
+ * Dnote is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Dnote is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Dnote. If not, see .
+ */
+
import React from 'react';
import classnames from 'classnames';
@@ -12,7 +30,7 @@ interface Props {
setRuleUUIDToDelete: React.Dispatch;
}
-const ReptitionList: React.SFC = ({
+const ReptitionList: React.FunctionComponent = ({
isFetching,
isFetched,
items,
diff --git a/web/src/components/Repetition/index.tsx b/web/src/components/Repetition/index.tsx
index 97baea6a..4fc87c9e 100644
--- a/web/src/components/Repetition/index.tsx
+++ b/web/src/components/Repetition/index.tsx
@@ -1,3 +1,21 @@
+/* Copyright (C) 2019 Monomax Software Pty Ltd
+ *
+ * This file is part of Dnote.
+ *
+ * Dnote is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Dnote is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Dnote. If not, see .
+ */
+
import React, { useState, useEffect } from 'react';
import Helmet from 'react-helmet';
import { Link } from 'react-router-dom';
diff --git a/web/src/components/Settings/Account/EmailModal.tsx b/web/src/components/Settings/Account/EmailModal.tsx
index ce8b93d9..eae827c6 100644
--- a/web/src/components/Settings/Account/EmailModal.tsx
+++ b/web/src/components/Settings/Account/EmailModal.tsx
@@ -34,7 +34,7 @@ interface Props {
onDismiss: () => void;
}
-const EmailModal: React.SFC = ({ currentEmail, isOpen, onDismiss }) => {
+const EmailModal: React.FunctionComponent = ({ currentEmail, isOpen, onDismiss }) => {
const [passwordVal, setPasswordVal] = useState('');
const [emailVal, setEmailVal] = useState('');
const [inProgress, setInProgress] = useState(false);
diff --git a/web/src/components/Settings/Account/EmailVerificationRow.tsx b/web/src/components/Settings/Account/EmailVerificationRow.tsx
index f066c52a..d40ad525 100644
--- a/web/src/components/Settings/Account/EmailVerificationRow.tsx
+++ b/web/src/components/Settings/Account/EmailVerificationRow.tsx
@@ -29,7 +29,7 @@ interface Props {
setFailureMsg: (string) => void;
}
-const EmailVerificationRow: React.SFC = ({
+const EmailVerificationRow: React.FunctionComponent = ({
verified,
setSuccessMsg,
setFailureMsg
diff --git a/web/src/components/Settings/Account/PasswordModal.tsx b/web/src/components/Settings/Account/PasswordModal.tsx
index a5e9d144..30c54403 100644
--- a/web/src/components/Settings/Account/PasswordModal.tsx
+++ b/web/src/components/Settings/Account/PasswordModal.tsx
@@ -32,7 +32,7 @@ interface Props {
const labelId = 'password-modal';
-const PasswordModal: React.SFC = ({ isOpen, onDismiss }) => {
+const PasswordModal: React.FunctionComponent = ({ isOpen, onDismiss }) => {
const [oldPassword, setOldPassword] = useState('');
const [newPassword, setNewPassword] = useState('');
const [newPasswordConfirmation, setNewPasswordConfirmation] = useState('');
diff --git a/web/src/components/Settings/Account/index.tsx b/web/src/components/Settings/Account/index.tsx
index 8df8c69d..e059411f 100644
--- a/web/src/components/Settings/Account/index.tsx
+++ b/web/src/components/Settings/Account/index.tsx
@@ -31,7 +31,7 @@ import styles from '../Settings.scss';
interface Props {}
-const Account: React.SFC = () => {
+const Account: React.FunctionComponent = () => {
const [emailModalOpen, setEmailModalOpen] = useState(false);
const [passwordModalOpen, setPasswordModalOpen] = useState(false);
const [successMsg, setSuccessMsg] = useState('');
diff --git a/web/src/components/Settings/Billing/CancelPlanModal.tsx b/web/src/components/Settings/Billing/CancelPlanModal.tsx
index 2e659e1f..757028b6 100644
--- a/web/src/components/Settings/Billing/CancelPlanModal.tsx
+++ b/web/src/components/Settings/Billing/CancelPlanModal.tsx
@@ -33,7 +33,7 @@ interface Props {
setFailureMsg: (string) => void;
}
-const CancelPlanModal: React.SFC = ({
+const CancelPlanModal: React.FunctionComponent = ({
isOpen,
onDismiss,
subscriptionId,
diff --git a/web/src/components/Settings/Billing/PaymentMethodModal/Form.tsx b/web/src/components/Settings/Billing/PaymentMethodModal/Form.tsx
index ad281035..ed6bf5b9 100644
--- a/web/src/components/Settings/Billing/PaymentMethodModal/Form.tsx
+++ b/web/src/components/Settings/Billing/PaymentMethodModal/Form.tsx
@@ -42,7 +42,7 @@ interface Props {
setErrMessage: (string) => void;
}
-const Form: React.SFC = ({
+const Form: React.FunctionComponent = ({
stripe,
nameOnCard,
setNameOnCard,
diff --git a/web/src/components/Settings/Billing/PaymentMethodModal/index.tsx b/web/src/components/Settings/Billing/PaymentMethodModal/index.tsx
index 9f858c28..94a399be 100644
--- a/web/src/components/Settings/Billing/PaymentMethodModal/index.tsx
+++ b/web/src/components/Settings/Billing/PaymentMethodModal/index.tsx
@@ -30,7 +30,7 @@ interface Props {
stripe: any;
}
-const PaymentMethodModal: React.SFC = ({
+const PaymentMethodModal: React.FunctionComponent = ({
isOpen,
onDismiss,
setSuccessMsg,
diff --git a/web/src/components/Settings/Billing/Placeholder.tsx b/web/src/components/Settings/Billing/Placeholder.tsx
index 1626ce99..78fb6b86 100644
--- a/web/src/components/Settings/Billing/Placeholder.tsx
+++ b/web/src/components/Settings/Billing/Placeholder.tsx
@@ -22,7 +22,7 @@ import classnames from 'classnames';
import settingsStyles from '../Settings.scss';
import styles from './Placeholder.scss';
-const Placeholder: React.SFC = () => {
+const Placeholder: React.FunctionComponent = () => {
return (
diff --git a/web/src/components/Settings/Billing/PlanRow.tsx b/web/src/components/Settings/Billing/PlanRow.tsx
index 0fabbc4f..c983e4f9 100644
--- a/web/src/components/Settings/Billing/PlanRow.tsx
+++ b/web/src/components/Settings/Billing/PlanRow.tsx
@@ -55,7 +55,7 @@ interface Props {
subscription: any;
}
-const PlanRow: React.SFC
= ({ subscription }) => {
+const PlanRow: React.FunctionComponent = ({ subscription }) => {
return (
diff --git a/web/src/components/Settings/Billing/ReactivateRow.tsx b/web/src/components/Settings/Billing/ReactivateRow.tsx
index 792aad5b..59b3daa7 100644
--- a/web/src/components/Settings/Billing/ReactivateRow.tsx
+++ b/web/src/components/Settings/Billing/ReactivateRow.tsx
@@ -31,7 +31,7 @@ interface Props {
setFailureMsg: (string) => void;
}
-const ReactivateRow: React.SFC
= ({
+const ReactivateRow: React.FunctionComponent = ({
subscriptionId,
setSuccessMsg,
setFailureMsg
diff --git a/web/src/components/Settings/Billing/index.tsx b/web/src/components/Settings/Billing/index.tsx
index 0e7db76b..e246b0a2 100644
--- a/web/src/components/Settings/Billing/index.tsx
+++ b/web/src/components/Settings/Billing/index.tsx
@@ -103,7 +103,7 @@ interface ContentProps {
stripeLoaded: boolean;
}
-const Content: React.SFC = ({
+const Content: React.FunctionComponent = ({
subscription,
source,
setIsPlanModalOpen,
@@ -169,7 +169,7 @@ const Content: React.SFC = ({
);
};
-const Billing: React.SFC = () => {
+const Billing: React.FunctionComponent = () => {
const [isPlanModalOpen, setIsPlanModalOpen] = useState(false);
const [isPaymentMethodModalOpen, setIsPaymentMethodModalOpen] = useState(
false
diff --git a/web/src/components/Settings/SettingRow.tsx b/web/src/components/Settings/SettingRow.tsx
index f7d65c44..405e589a 100644
--- a/web/src/components/Settings/SettingRow.tsx
+++ b/web/src/components/Settings/SettingRow.tsx
@@ -29,7 +29,7 @@ interface Props {
value?: string;
}
-const SettingRow: React.SFC = ({
+const SettingRow: React.FunctionComponent = ({
name,
desc,
value,
diff --git a/web/src/components/Settings/Sidebar.tsx b/web/src/components/Settings/Sidebar.tsx
index 56b52359..d270bcad 100644
--- a/web/src/components/Settings/Sidebar.tsx
+++ b/web/src/components/Settings/Sidebar.tsx
@@ -25,7 +25,7 @@ import styles from './Sidebar.scss';
interface Props {}
-const Sidebar: React.SFC = () => {
+const Sidebar: React.FunctionComponent = () => {
return (
diff --git a/web/src/components/Settings/index.tsx b/web/src/components/Settings/index.tsx
index 183467ac..d7a91470 100644
--- a/web/src/components/Settings/index.tsx
+++ b/web/src/components/Settings/index.tsx
@@ -44,7 +44,7 @@ interface Match {
interface Props extends RouteComponentProps {}
-const Settings: React.SFC = ({ match }) => {
+const Settings: React.FunctionComponent = ({ match }) => {
const { params } = match;
const { section } = params;
diff --git a/web/src/components/Subscription/Checkout/Form.tsx b/web/src/components/Subscription/Checkout/Form.tsx
index 8c6b527f..554ad026 100644
--- a/web/src/components/Subscription/Checkout/Form.tsx
+++ b/web/src/components/Subscription/Checkout/Form.tsx
@@ -41,7 +41,7 @@ interface Props extends RouteComponentProps {
history: History;
}
-const Form: React.SFC = ({ stripe, stripeLoadError, history }) => {
+const Form: React.FunctionComponent = ({ stripe, stripeLoadError, history }) => {
const [nameOnCard, setNameOnCard] = useState('');
const cardElementRef = useRef(null);
const [cardElementLoaded, setCardElementLoaded] = useState(false);
diff --git a/web/src/components/Subscription/Checkout/index.tsx b/web/src/components/Subscription/Checkout/index.tsx
index 1b93197d..408b56bf 100644
--- a/web/src/components/Subscription/Checkout/index.tsx
+++ b/web/src/components/Subscription/Checkout/index.tsx
@@ -22,7 +22,7 @@ import { StripeProvider, Elements } from 'react-stripe-elements';
import { useScript } from 'web/libs/hooks';
import CheckoutForm from './Form';
-const Checkout: React.SFC = () => {
+const Checkout: React.FunctionComponent = () => {
const [stripeLoaded, stripeLoadError] = useScript('https://js.stripe.com/v3');
const key = `${__STRIPE_PUBLIC_KEY__}`;
diff --git a/web/src/components/Subscription/index.tsx b/web/src/components/Subscription/index.tsx
index cd08526c..5c029cfa 100644
--- a/web/src/components/Subscription/index.tsx
+++ b/web/src/components/Subscription/index.tsx
@@ -85,7 +85,7 @@ const baseFeatures = [
interface Props {}
-const Subscription: React.SFC = () => {
+const Subscription: React.FunctionComponent = () => {
const { user } = useSelector(state => {
return {
user: state.auth.user.data
diff --git a/web/src/components/TabBar/Item.tsx b/web/src/components/TabBar/Item.tsx
index f05f819e..6fe6cf07 100644
--- a/web/src/components/TabBar/Item.tsx
+++ b/web/src/components/TabBar/Item.tsx
@@ -22,7 +22,7 @@ import styles from './Item.scss';
interface Props {}
-const Item: React.SFC = ({ children }) => {
+const Item: React.FunctionComponent = ({ children }) => {
return {children} ;
};
diff --git a/web/src/components/TabBar/index.tsx b/web/src/components/TabBar/index.tsx
index eb68ed6f..eeae0365 100644
--- a/web/src/components/TabBar/index.tsx
+++ b/web/src/components/TabBar/index.tsx
@@ -44,7 +44,7 @@ function getFill(active: boolean): string {
return ret;
}
-const TabBar: React.SFC = ({
+const TabBar: React.FunctionComponent = ({
location,
isMobileMenuOpen,
setMobileMenuOpen
diff --git a/web/src/components/VerifyEmail/index.tsx b/web/src/components/VerifyEmail/index.tsx
index 5933c91a..409eb928 100644
--- a/web/src/components/VerifyEmail/index.tsx
+++ b/web/src/components/VerifyEmail/index.tsx
@@ -31,7 +31,7 @@ interface Match {
interface Props extends RouteComponentProps {}
-const VerifyEmail: React.SFC = ({ match, history }) => {
+const VerifyEmail: React.FunctionComponent = ({ match, history }) => {
const dispatch = useDispatch();
const { token } = match.params;
diff --git a/web/src/helpers/time/format.ts b/web/src/helpers/time/format.ts
index 24b99b01..8eb508d2 100644
--- a/web/src/helpers/time/format.ts
+++ b/web/src/helpers/time/format.ts
@@ -1,3 +1,21 @@
+/* Copyright (C) 2019 Monomax Software Pty Ltd
+ *
+ * This file is part of Dnote.
+ *
+ * Dnote is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Dnote is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Dnote. If not, see .
+ */
+
import {
getMonthName,
getUTCOffset,
diff --git a/web/src/hocs/guestOnly.tsx b/web/src/hocs/guestOnly.tsx
index d6b75af7..a6c3f9b9 100644
--- a/web/src/hocs/guestOnly.tsx
+++ b/web/src/hocs/guestOnly.tsx
@@ -40,7 +40,7 @@ function renderFallback(referrer?: string) {
export default function(Component: React.ComponentType): React.ComponentType {
interface Props extends RouteComponentProps {}
- const HOC: React.SFC = props => {
+ const HOC: React.FunctionComponent = props => {
const { location } = props;
const { userData } = useSelector(state => {
diff --git a/web/src/hocs/scrollTop.tsx b/web/src/hocs/scrollTop.tsx
index 1a6749ff..96e04d2e 100644
--- a/web/src/hocs/scrollTop.tsx
+++ b/web/src/hocs/scrollTop.tsx
@@ -22,7 +22,7 @@ import { withRouter, RouteComponentProps } from 'react-router-dom';
interface Props extends RouteComponentProps {}
export default function(WrappedComponent: React.ComponentType) {
- const ScrollToTop: React.SFC = ({ location }) => {
+ const ScrollToTop: React.FunctionComponent = ({ location }) => {
const { pathname } = location;
useEffect(() => {
console.log('scrolling to top');
diff --git a/web/src/hocs/userOnly.tsx b/web/src/hocs/userOnly.tsx
index 81d2ba85..0225cb31 100644
--- a/web/src/hocs/userOnly.tsx
+++ b/web/src/hocs/userOnly.tsx
@@ -33,7 +33,7 @@ export default function(
) {
interface Props extends RouteComponentProps {}
- const HOC: React.SFC = props => {
+ const HOC: React.FunctionComponent = props => {
const { location } = props;
const { userData } = useSelector(state => {