|
1 | 1 | import {Button, Loader, Table} from '@mantine/core';
|
2 | 2 | import {ContextModalProps, useModals} from '@mantine/modals';
|
3 | 3 | import {showNotification} from '@mantine/notifications';
|
4 |
| -import {IconArrowUpRight, IconHistory} from '@tabler/icons-preact'; |
| 4 | +import {IconArrowUpRight, IconCopy, IconHistory} from '@tabler/icons-preact'; |
5 | 5 | import {useEffect, useState} from 'preact/hooks';
|
6 | 6 | import {useModalTheme} from '../../hooks/useModalTheme.js';
|
7 | 7 | import {Version, cmsListVersions, cmsRestoreVersion} from '../../utils/doc.js';
|
| 8 | +import {useCopyDocModal} from '../CopyDocModal/CopyDocModal.js'; |
8 | 9 | import {Heading} from '../Heading/Heading.js';
|
9 | 10 | import {Text} from '../Text/Text.js';
|
10 | 11 | import './VersionHistoryModal.css';
|
@@ -34,10 +35,11 @@ export function useVersionHistoryModal(props: VersionHistoryModalProps) {
|
34 | 35 | export function VersionHistoryModal(
|
35 | 36 | modalProps: ContextModalProps<VersionHistoryModalProps>
|
36 | 37 | ) {
|
37 |
| - const {innerProps: props} = modalProps; |
| 38 | + const {innerProps: props, context, id} = modalProps; |
38 | 39 | const docId = props.docId;
|
39 | 40 | const [loading, setLoading] = useState(true);
|
40 | 41 | const [versions, setVersions] = useState<Version[]>([]);
|
| 42 | + const copyDocModal = useCopyDocModal({fromDocId: docId}); |
41 | 43 |
|
42 | 44 | const dateFormat = new Intl.DateTimeFormat('en-US', {
|
43 | 45 | year: 'numeric',
|
@@ -68,6 +70,22 @@ export function VersionHistoryModal(
|
68 | 70 | }
|
69 | 71 | }
|
70 | 72 |
|
| 73 | + function copyToNewDoc(version: Version) { |
| 74 | + let label = `${docId}@${version._versionId}`; |
| 75 | + const modifiedAt = version.sys?.modifiedAt?.toDate(); |
| 76 | + if (modifiedAt) { |
| 77 | + const isoDate = formatIsoDate(modifiedAt); |
| 78 | + label = `${docId}@${isoDate}`; |
| 79 | + } |
| 80 | + copyDocModal.open({ |
| 81 | + fields: version.fields || {}, |
| 82 | + fromLabel: label, |
| 83 | + onSuccess: () => { |
| 84 | + context.closeModal(id); |
| 85 | + }, |
| 86 | + }); |
| 87 | + } |
| 88 | + |
71 | 89 | function getCompareUrl(version: Version) {
|
72 | 90 | const left = toUrlParam(docId, version._versionId);
|
73 | 91 | const right = toUrlParam(docId, 'draft');
|
@@ -128,6 +146,15 @@ export function VersionHistoryModal(
|
128 | 146 | >
|
129 | 147 | restore
|
130 | 148 | </Button>
|
| 149 | + <Button |
| 150 | + variant="default" |
| 151 | + size="xs" |
| 152 | + compact |
| 153 | + onClick={() => copyToNewDoc(version)} |
| 154 | + leftIcon={<IconCopy size={12} />} |
| 155 | + > |
| 156 | + copy to doc |
| 157 | + </Button> |
131 | 158 | <Button
|
132 | 159 | className="VersionHistoryModal__versions__buttons__compare"
|
133 | 160 | component="a"
|
@@ -157,4 +184,13 @@ function toUrlParam(docId: string, versionId: string): string {
|
157 | 184 | .replaceAll('%40', '@');
|
158 | 185 | }
|
159 | 186 |
|
| 187 | +function formatIsoDate(date: Date): string { |
| 188 | + const year = date.getFullYear(); |
| 189 | + const month = String(date.getMonth() + 1).padStart(2, '0'); |
| 190 | + const day = String(date.getDate()).padStart(2, '0'); |
| 191 | + const hours = String(date.getHours()).padStart(2, '0'); |
| 192 | + const minutes = String(date.getMinutes()).padStart(2, '0'); |
| 193 | + return `${year}-${month}-${day}T${hours}:${minutes}`; |
| 194 | +} |
| 195 | + |
160 | 196 | VersionHistoryModal.id = MODAL_ID;
|
0 commit comments