|
|
@@ -1,47 +1,47 @@
|
|
|
-import React from 'react';
|
|
|
+import React, { FC } from 'react';
|
|
|
|
|
|
import { useTranslation } from 'next-i18next';
|
|
|
|
|
|
-const ShareLinkAlert = () => {
|
|
|
- const { t } = useTranslation();
|
|
|
+const generateRatio = (expiredAt: Date, createdAt: Date): number => {
|
|
|
+ const wholeTime = new Date(expiredAt).getTime() - new Date(createdAt).getTime();
|
|
|
+ const remainingTime = new Date(expiredAt).getTime() - new Date().getTime();
|
|
|
+ return remainingTime / wholeTime;
|
|
|
+};
|
|
|
|
|
|
- const shareContent = document.getElementById('is-shared-page');
|
|
|
- const expiredAt = shareContent.getAttribute('data-share-link-expired-at');
|
|
|
- const createdAt = shareContent.getAttribute('data-share-link-created-at');
|
|
|
+const getAlertColor = (ratio: number): string => {
|
|
|
+ let color: string;
|
|
|
|
|
|
- function generateRatio() {
|
|
|
- const wholeTime = new Date(expiredAt).getTime() - new Date(createdAt).getTime();
|
|
|
- const remainingTime = new Date(expiredAt).getTime() - new Date().getTime();
|
|
|
- return remainingTime / wholeTime;
|
|
|
+ if (ratio >= 0.75) {
|
|
|
+ color = 'success';
|
|
|
+ }
|
|
|
+ else if (ratio < 0.75 && ratio >= 0.5) {
|
|
|
+ color = 'info';
|
|
|
+ }
|
|
|
+ else if (ratio < 0.5 && ratio >= 0.25) {
|
|
|
+ color = 'warning';
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ color = 'danger';
|
|
|
}
|
|
|
+ return color;
|
|
|
+};
|
|
|
|
|
|
- let ratio = 1;
|
|
|
+type Props = {
|
|
|
+ expiredAt: Date,
|
|
|
+ createdAt: Date,
|
|
|
+}
|
|
|
|
|
|
- if (expiredAt !== '') {
|
|
|
- ratio = generateRatio();
|
|
|
- }
|
|
|
+const ShareLinkAlert: FC<Props> = (props: Props) => {
|
|
|
+ const { t } = useTranslation();
|
|
|
+ const { expiredAt, createdAt } = props;
|
|
|
|
|
|
- function specifyColor() {
|
|
|
- let color;
|
|
|
- if (ratio >= 0.75) {
|
|
|
- color = 'success';
|
|
|
- }
|
|
|
- else if (ratio < 0.75 && ratio >= 0.5) {
|
|
|
- color = 'info';
|
|
|
- }
|
|
|
- else if (ratio < 0.5 && ratio >= 0.25) {
|
|
|
- color = 'warning';
|
|
|
- }
|
|
|
- else {
|
|
|
- color = 'danger';
|
|
|
- }
|
|
|
- return color;
|
|
|
- }
|
|
|
+ const ratio = expiredAt != null ? generateRatio(expiredAt, createdAt) : 1;
|
|
|
+ const alertColor = getAlertColor(ratio);
|
|
|
|
|
|
return (
|
|
|
- <p className={`alert alert-${specifyColor()} py-3 px-4 d-edit-none`}>
|
|
|
+ <p className={`alert alert-${alertColor} py-3 px-4 d-edit-none`}>
|
|
|
<i className="icon-fw icon-link"></i>
|
|
|
- {(expiredAt === '' ? <span>{t('page_page.notice.no_deadline')}</span>
|
|
|
+ {(expiredAt === null ? <span>{t('page_page.notice.no_deadline')}</span>
|
|
|
// eslint-disable-next-line react/no-danger
|
|
|
: <span dangerouslySetInnerHTML={{ __html: t('page_page.notice.expiration', { expiredAt }) }} />
|
|
|
)}
|