@plutonhq/core-frontend 0.1.13 → 0.1.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-lib/@types/backups.d.ts +26 -0
- package/dist-lib/@types/backups.d.ts.map +1 -1
- package/dist-lib/@types/devices.d.ts +7 -0
- package/dist-lib/@types/devices.d.ts.map +1 -1
- package/dist-lib/@types/plans.d.ts +21 -1
- package/dist-lib/@types/plans.d.ts.map +1 -1
- package/dist-lib/@types/restores.d.ts +2 -0
- package/dist-lib/@types/restores.d.ts.map +1 -1
- package/dist-lib/components/Device/DeviceBackups/DeviceBackups.d.ts +3 -2
- package/dist-lib/components/Device/DeviceBackups/DeviceBackups.d.ts.map +1 -1
- package/dist-lib/components/Device/DeviceBackups/DeviceBackups.js +73 -85
- package/dist-lib/components/Device/DeviceBackups/DeviceBackups.js.map +1 -1
- package/dist-lib/components/Plan/BackupEvents/BackupEvents.d.ts.map +1 -1
- package/dist-lib/components/Plan/BackupEvents/BackupEvents.js +88 -50
- package/dist-lib/components/Plan/BackupEvents/BackupEvents.js.map +1 -1
- package/dist-lib/components/Plan/BackupEvents/BackupEvents.module.scss.js +70 -38
- package/dist-lib/components/Plan/BackupEvents/BackupEvents.module.scss.js.map +1 -1
- package/dist-lib/components/Plan/BackupProgress/BackupProgress.d.ts.map +1 -1
- package/dist-lib/components/Plan/BackupProgress/BackupProgress.js +166 -123
- package/dist-lib/components/Plan/BackupProgress/BackupProgress.js.map +1 -1
- package/dist-lib/components/Plan/BackupProgress/BackupProgress.module.scss.js +64 -30
- package/dist-lib/components/Plan/BackupProgress/BackupProgress.module.scss.js.map +1 -1
- package/dist-lib/components/Plan/Backups/Backups.d.ts +8 -1
- package/dist-lib/components/Plan/Backups/Backups.d.ts.map +1 -1
- package/dist-lib/components/Plan/Backups/Backups.js +154 -125
- package/dist-lib/components/Plan/Backups/Backups.js.map +1 -1
- package/dist-lib/components/Plan/EditPlan/EditPlan.d.ts.map +1 -1
- package/dist-lib/components/Plan/EditPlan/EditPlan.js +11 -10
- package/dist-lib/components/Plan/EditPlan/EditPlan.js.map +1 -1
- package/dist-lib/components/Plan/Mirrors/MirrorDetails.d.ts +12 -0
- package/dist-lib/components/Plan/Mirrors/MirrorDetails.d.ts.map +1 -0
- package/dist-lib/components/Plan/Mirrors/MirrorDetails.js +68 -0
- package/dist-lib/components/Plan/Mirrors/MirrorDetails.js.map +1 -0
- package/dist-lib/components/Plan/Mirrors/MirrorDetails.module.scss.js +26 -0
- package/dist-lib/components/Plan/Mirrors/MirrorDetails.module.scss.js.map +1 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStatusBadge.d.ts +11 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStatusBadge.d.ts.map +1 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStatusBadge.js +38 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStatusBadge.js.map +1 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStatusBadge.module.scss.js +16 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStatusBadge.module.scss.js.map +1 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStorageSelector.d.ts +14 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStorageSelector.d.ts.map +1 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStorageSelector.js +54 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStorageSelector.js.map +1 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStorageSelector.module.scss.js +26 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStorageSelector.module.scss.js.map +1 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStorageSelectorModal.d.ts +15 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStorageSelectorModal.d.ts.map +1 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStorageSelectorModal.js +34 -0
- package/dist-lib/components/Plan/Mirrors/MirrorStorageSelectorModal.js.map +1 -0
- package/dist-lib/components/Plan/PlanBackups/PlanBackups.d.ts.map +1 -1
- package/dist-lib/components/Plan/PlanBackups/PlanBackups.js +20 -17
- package/dist-lib/components/Plan/PlanBackups/PlanBackups.js.map +1 -1
- package/dist-lib/components/Plan/PlanForm/PlanForm.d.ts +2 -1
- package/dist-lib/components/Plan/PlanForm/PlanForm.d.ts.map +1 -1
- package/dist-lib/components/Plan/PlanForm/PlanForm.js +85 -58
- package/dist-lib/components/Plan/PlanForm/PlanForm.js.map +1 -1
- package/dist-lib/components/Plan/PlanItems/PlanItem.d.ts.map +1 -1
- package/dist-lib/components/Plan/PlanItems/PlanItem.js +58 -59
- package/dist-lib/components/Plan/PlanItems/PlanItem.js.map +1 -1
- package/dist-lib/components/Plan/PlanRemoveModal/PlanRemoveModal.js +8 -8
- package/dist-lib/components/Plan/PlanRemoveModal/PlanRemoveModal.js.map +1 -1
- package/dist-lib/components/Plan/PlanSettings/PlanReplicationSettings.d.ts +14 -0
- package/dist-lib/components/Plan/PlanSettings/PlanReplicationSettings.d.ts.map +1 -0
- package/dist-lib/components/Plan/PlanSettings/PlanReplicationSettings.js +290 -0
- package/dist-lib/components/Plan/PlanSettings/PlanReplicationSettings.js.map +1 -0
- package/dist-lib/components/Plan/PlanSettings/PlanReplicationSettings.module.scss.js +26 -0
- package/dist-lib/components/Plan/PlanSettings/PlanReplicationSettings.module.scss.js.map +1 -0
- package/dist-lib/components/Plan/PlanStats/PlanStats.d.ts.map +1 -1
- package/dist-lib/components/Plan/PlanStats/PlanStats.js +41 -42
- package/dist-lib/components/Plan/PlanStats/PlanStats.js.map +1 -1
- package/dist-lib/components/Plan/PlanStats/PlanStats.module.scss.js +5 -5
- package/dist-lib/components/Plan/PlanStorageInfo/PlanStorageInfo.d.ts +15 -0
- package/dist-lib/components/Plan/PlanStorageInfo/PlanStorageInfo.d.ts.map +1 -0
- package/dist-lib/components/Plan/PlanStorageInfo/PlanStorageInfo.js +69 -0
- package/dist-lib/components/Plan/PlanStorageInfo/PlanStorageInfo.js.map +1 -0
- package/dist-lib/components/Plan/PlanStorageInfo/PlanStorageInfo.module.scss.js +16 -0
- package/dist-lib/components/Plan/PlanStorageInfo/PlanStorageInfo.module.scss.js.map +1 -0
- package/dist-lib/components/Restore/RestoreWizard/RestoreConfirmStep.d.ts.map +1 -1
- package/dist-lib/components/Restore/RestoreWizard/RestoreConfirmStep.js +36 -34
- package/dist-lib/components/Restore/RestoreWizard/RestoreConfirmStep.js.map +1 -1
- package/dist-lib/components/Restore/RestoreWizard/RestorePreviewStep.d.ts.map +1 -1
- package/dist-lib/components/Restore/RestoreWizard/RestorePreviewStep.js +7 -5
- package/dist-lib/components/Restore/RestoreWizard/RestorePreviewStep.js.map +1 -1
- package/dist-lib/components/Restore/RestoreWizard/RestoreSettingsStep.d.ts +12 -4
- package/dist-lib/components/Restore/RestoreWizard/RestoreSettingsStep.d.ts.map +1 -1
- package/dist-lib/components/Restore/RestoreWizard/RestoreSettingsStep.js +44 -32
- package/dist-lib/components/Restore/RestoreWizard/RestoreSettingsStep.js.map +1 -1
- package/dist-lib/components/Restore/RestoreWizard/RestoreWizard.d.ts +5 -1
- package/dist-lib/components/Restore/RestoreWizard/RestoreWizard.d.ts.map +1 -1
- package/dist-lib/components/Restore/RestoreWizard/RestoreWizard.js +48 -44
- package/dist-lib/components/Restore/RestoreWizard/RestoreWizard.js.map +1 -1
- package/dist-lib/components/Restore/RestoreWizard/RestoreWizard.module.scss.js +32 -32
- package/dist-lib/components/Settings/GeneralSettings/GeneralSettings.js +14 -14
- package/dist-lib/components/Settings/GeneralSettings/GeneralSettings.js.map +1 -1
- package/dist-lib/components/Settings/IntegrationSettings/IntegrationSettings.d.ts.map +1 -1
- package/dist-lib/components/Settings/IntegrationSettings/IntegrationSettings.js +28 -19
- package/dist-lib/components/Settings/IntegrationSettings/IntegrationSettings.js.map +1 -1
- package/dist-lib/components/common/Icon/Icon.d.ts.map +1 -1
- package/dist-lib/components/common/Icon/Icon.js +11 -0
- package/dist-lib/components/common/Icon/Icon.js.map +1 -1
- package/dist-lib/components/common/PageHeader/PageHeader.module.scss.js +6 -6
- package/dist-lib/components/index.d.ts +4 -0
- package/dist-lib/components/index.d.ts.map +1 -1
- package/dist-lib/components.js +86 -78
- package/dist-lib/components.js.map +1 -1
- package/dist-lib/hooks/usePwaAutoUpdate.d.ts +11 -2
- package/dist-lib/hooks/usePwaAutoUpdate.d.ts.map +1 -1
- package/dist-lib/hooks/usePwaAutoUpdate.js +32 -10
- package/dist-lib/hooks/usePwaAutoUpdate.js.map +1 -1
- package/dist-lib/router.d.ts.map +1 -1
- package/dist-lib/router.js +46 -35
- package/dist-lib/router.js.map +1 -1
- package/dist-lib/routes/DeviceSingle/DeviceSingle.d.ts.map +1 -1
- package/dist-lib/routes/DeviceSingle/DeviceSingle.js +40 -40
- package/dist-lib/routes/DeviceSingle/DeviceSingle.js.map +1 -1
- package/dist-lib/services/backups.d.ts +15 -2
- package/dist-lib/services/backups.d.ts.map +1 -1
- package/dist-lib/services/backups.js +119 -100
- package/dist-lib/services/backups.js.map +1 -1
- package/dist-lib/services/plans.d.ts +14 -0
- package/dist-lib/services/plans.d.ts.map +1 -1
- package/dist-lib/services/plans.js +160 -129
- package/dist-lib/services/plans.js.map +1 -1
- package/dist-lib/services/restores.d.ts +10 -2
- package/dist-lib/services/restores.d.ts.map +1 -1
- package/dist-lib/services/restores.js +61 -57
- package/dist-lib/services/restores.js.map +1 -1
- package/dist-lib/services/users.d.ts.map +1 -1
- package/dist-lib/services/users.js +32 -32
- package/dist-lib/services/users.js.map +1 -1
- package/dist-lib/services.js +107 -103
- package/dist-lib/styles/core-frontend.css +1 -1
- package/dist-lib/utils/progressHelpers.d.ts +12 -1
- package/dist-lib/utils/progressHelpers.d.ts.map +1 -1
- package/dist-lib/utils/progressHelpers.js +121 -63
- package/dist-lib/utils/progressHelpers.js.map +1 -1
- package/dist-lib/utils.js +29 -28
- package/package.json +1 -1
- package/src/@types/backups.ts +28 -0
- package/src/@types/devices.ts +8 -0
- package/src/@types/plans.ts +23 -1
- package/src/@types/restores.ts +2 -0
- package/src/components/Device/DeviceBackups/DeviceBackups.tsx +11 -36
- package/src/components/Plan/BackupEvents/BackupEvents.module.scss +65 -0
- package/src/components/Plan/BackupEvents/BackupEvents.tsx +65 -4
- package/src/components/Plan/BackupProgress/BackupProgress.module.scss +121 -3
- package/src/components/Plan/BackupProgress/BackupProgress.tsx +149 -71
- package/src/components/Plan/Backups/Backups.tsx +52 -4
- package/src/components/Plan/EditPlan/EditPlan.tsx +1 -0
- package/src/components/Plan/Mirrors/MirrorDetails.module.scss +76 -0
- package/src/components/Plan/Mirrors/MirrorDetails.tsx +100 -0
- package/src/components/Plan/Mirrors/MirrorStatusBadge.module.scss +25 -0
- package/src/components/Plan/Mirrors/MirrorStatusBadge.tsx +65 -0
- package/src/components/Plan/Mirrors/MirrorStorageSelector.module.scss +97 -0
- package/src/components/Plan/Mirrors/MirrorStorageSelector.tsx +70 -0
- package/src/components/Plan/Mirrors/MirrorStorageSelectorModal.tsx +40 -0
- package/src/components/Plan/PlanBackups/PlanBackups.tsx +4 -1
- package/src/components/Plan/PlanForm/PlanForm.tsx +30 -3
- package/src/components/Plan/PlanItems/PlanItem.tsx +3 -3
- package/src/components/Plan/PlanRemoveModal/PlanRemoveModal.tsx +1 -1
- package/src/components/Plan/PlanSettings/PlanReplicationSettings.module.scss +105 -0
- package/src/components/Plan/PlanSettings/PlanReplicationSettings.tsx +334 -0
- package/src/components/Plan/PlanStats/PlanStats.module.scss +1 -1
- package/src/components/Plan/PlanStats/PlanStats.tsx +8 -8
- package/src/components/Plan/PlanStorageInfo/PlanStorageInfo.module.scss +43 -0
- package/src/components/Plan/PlanStorageInfo/PlanStorageInfo.tsx +83 -0
- package/src/components/Restore/RestoreWizard/RestoreConfirmStep.tsx +2 -0
- package/src/components/Restore/RestoreWizard/RestorePreviewStep.tsx +2 -0
- package/src/components/Restore/RestoreWizard/RestoreSettingsStep.tsx +36 -13
- package/src/components/Restore/RestoreWizard/RestoreWizard.module.scss +4 -0
- package/src/components/Restore/RestoreWizard/RestoreWizard.tsx +9 -1
- package/src/components/Settings/GeneralSettings/GeneralSettings.tsx +1 -1
- package/src/components/Settings/IntegrationSettings/IntegrationSettings.tsx +9 -2
- package/src/components/common/Icon/Icon.tsx +10 -1
- package/src/components/common/PageHeader/PageHeader.module.scss +3 -0
- package/src/components/index.ts +6 -0
- package/src/hooks/usePwaAutoUpdate.ts +51 -11
- package/src/router.tsx +26 -17
- package/src/routes/DeviceSingle/DeviceSingle.tsx +3 -3
- package/src/services/backups.ts +32 -9
- package/src/services/plans.ts +45 -0
- package/src/services/restores.ts +10 -2
- package/src/services/users.ts +14 -5
- package/src/utils/progressHelpers.ts +85 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RestoreSettingsStep.js","sources":["../../../../src/components/Restore/RestoreWizard/RestoreSettingsStep.tsx"],"sourcesContent":["import { useState } from 'react';\r\nimport Select from '../../common/form/Select/Select';\r\nimport Input from '../../common/form/Input/Input';\r\nimport Icon from '../../common/Icon/Icon';\r\nimport classes from './RestoreWizard.module.scss';\r\nimport FolderPicker from '../../common/FolderPicker/FolderPicker';\r\nimport { RestoreSettings } from '../../../@types/restores';\r\nimport Toggle from '../../common/form/Toggle/Toggle';\r\n\r\ninterface settingsStepProps {\r\n backupId: string;\r\n settings: RestoreSettings;\r\n updateSettings: (settings: settingsStepProps['settings']) => void;\r\n goNext: () => void;\r\n close: () => void;\r\n}\r\n\r\nconst settingsStep = ({ backupId, settings, updateSettings, goNext, close }: settingsStepProps) => {\r\n const [showFileManager, setShowFileManager] = useState(false);\r\n const [showCustomPathError, setShowCustomPathError] = useState(false);\r\n\r\n const gotoPreviewStep = () => {\r\n if ((settings.type === 'custom' && settings.path) || settings.type === 'original') {\r\n goNext();\r\n } else {\r\n setShowCustomPathError(true);\r\n }\r\n };\r\n\r\n return (\r\n <div className={classes.stepContent}>\r\n <div className={classes.step}>\r\n <p>\r\n Select where you want to restore <strong>\"backup-{backupId}\"</strong>\r\n </p>\r\n <div className={classes.settingBlock}>\r\n <Select\r\n label=\"\"\r\n options={[\r\n { label: 'Restore to Original Path(s)', value: 'original' },\r\n { label: 'Restore to a Custom Path', value: 'custom' },\r\n ]}\r\n fieldValue={settings.type || 'sun'}\r\n onUpdate={(val: string) => updateSettings({ ...settings, type: val as 'original' | 'custom' })}\r\n full={true}\r\n />\r\n </div>\r\n {settings.type === 'custom' && (\r\n <div className={`${classes.settingBlock} ${showCustomPathError ? classes.settingBlockError : ''}`}>\r\n <Input\r\n label=\"Restore Backup To\"\r\n placeholder=\"Restore Path\"\r\n fieldValue={settings.path}\r\n onUpdate={(val) => {\r\n updateSettings({ ...settings, path: val });\r\n if (showCustomPathError) {\r\n setShowCustomPathError(false);\r\n }\r\n }}\r\n full={true}\r\n />\r\n <button\r\n data-tooltip-id=\"appTooltip\"\r\n data-tooltip-content=\"Open FileManager to Select Path\"\r\n data-tooltip-place=\"top\"\r\n className={classes.fileManagerBtn}\r\n onClick={() => setShowFileManager(true)}\r\n >\r\n <Icon type=\"folders\" size={16} />\r\n </button>\r\n </div>\r\n )}\r\n\r\n <div className={classes.settingBlock}>\r\n <div className={classes.checkboxSettings}>\r\n <div className={classes.label}>Overwrite Policy</div>\r\n <div className={classes.checkboxSettingsOpts}>\r\n <div\r\n onClick={() => updateSettings({ ...settings, overwrite: 'always' })}\r\n className={` ${classes.checkboxOption} ${settings.overwrite === 'always' ? classes.checkboxOptionActive : ''} `}\r\n >\r\n <div>\r\n <Icon type={settings.overwrite === 'always' ? 'check-circle-filled' : 'check-circle'} size={16} />\r\n </div>\r\n <div>\r\n <h5>Always Overwrite (Default)</h5>\r\n <div>\r\n Always overwrites already existing files. Existing file content will be verified first and only mismatching parts will\r\n be restored to minimize downloads. Updates the metadata of all files.\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n onClick={() => updateSettings({ ...settings, overwrite: 'if-changed' })}\r\n className={` ${classes.checkboxOption} ${settings.overwrite === 'if-changed' ? classes.checkboxOptionActive : ''} `}\r\n >\r\n <div>\r\n <Icon type={settings.overwrite === 'if-changed' ? 'check-circle-filled' : 'check-circle'} size={16} />\r\n </div>\r\n <div>\r\n <h5>Overwrite If Changed</h5>\r\n <div>\r\n Like the previous case, but speeds up the file content check by assuming that files with matching size and modification\r\n time (mtime) are already up to date. In case of a mismatch, the full file content is verified. Updates the metadata of\r\n all files.\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n onClick={() => updateSettings({ ...settings, overwrite: 'if-newer' })}\r\n className={` ${classes.checkboxOption} ${settings.overwrite === 'if-newer' ? classes.checkboxOptionActive : ''} `}\r\n >\r\n <div>\r\n <Icon type={settings.overwrite === 'if-newer' ? 'check-circle-filled' : 'check-circle'} size={16} />\r\n </div>\r\n <div>\r\n <h5>Overwrite If Newer</h5>\r\n <div>Only overwrite existing files if the file in the snapshot has a newer modification time (mtime).</div>\r\n </div>\r\n </div>\r\n <div\r\n onClick={() => updateSettings({ ...settings, overwrite: 'never' })}\r\n className={` ${classes.checkboxOption} ${settings.overwrite === 'never' ? classes.checkboxOptionActive : ''} `}\r\n >\r\n <div>\r\n <Icon type={settings.overwrite === 'never' ? 'check-circle-filled' : 'check-circle'} size={16} />\r\n </div>\r\n <div>\r\n <h5>Never Overwrite</h5>\r\n <div>Never overwrite existing files.</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className={classes.settingBlock}>\r\n <Toggle\r\n label=\"Delete Files that are not in the Snapshot from the Target Restore Path\"\r\n fieldValue={settings.delete}\r\n inline={false}\r\n onUpdate={(val) => {\r\n updateSettings({ ...settings, delete: val });\r\n }}\r\n />\r\n </div>\r\n </div>\r\n <div className={classes.footer}>\r\n <div className={classes.footerLeft}></div>\r\n <div className={classes.footerRight}>\r\n <button onClick={() => close()}>Cancel</button>\r\n <button onClick={() => gotoPreviewStep()}>\r\n Next: Select Files to Restore <Icon type=\"arrow-right\" size={14} />\r\n </button>\r\n </div>\r\n </div>\r\n\r\n {showFileManager && (\r\n <FolderPicker\r\n deviceId={'main'}\r\n title=\"Choose a Path to Restore\"\r\n footerText=\"Select a Path where you want to restore your backup\"\r\n selected={settings.path}\r\n close={() => setShowFileManager(false)}\r\n onSelect={(p) => updateSettings({ ...settings, path: p })}\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default settingsStep;\r\n"],"names":["settingsStep","backupId","settings","updateSettings","goNext","close","showFileManager","setShowFileManager","useState","showCustomPathError","setShowCustomPathError","gotoPreviewStep","jsxs","classes","jsx","Select","val","Input","Icon","Toggle","FolderPicker","p"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RestoreSettingsStep.js","sources":["../../../../src/components/Restore/RestoreWizard/RestoreSettingsStep.tsx"],"sourcesContent":["import { useState } from 'react';\r\nimport Select from '../../common/form/Select/Select';\r\nimport Input from '../../common/form/Input/Input';\r\nimport Icon from '../../common/Icon/Icon';\r\nimport classes from './RestoreWizard.module.scss';\r\nimport FolderPicker from '../../common/FolderPicker/FolderPicker';\r\nimport { RestoreSettings } from '../../../@types/restores';\r\nimport Toggle from '../../common/form/Toggle/Toggle';\r\nimport { Backup } from '../../..';\r\n\r\ninterface RestoreSettingsStepProps {\r\n backupId: string;\r\n deviceId: string;\r\n settings: RestoreSettings;\r\n mirrors?: Backup['mirrors'];\r\n primaryStorage: { id: string; type: string; name: string };\r\n updateSettings: (settings: RestoreSettingsStepProps['settings']) => void;\r\n goNext: () => void;\r\n close: () => void;\r\n}\r\n\r\nconst RestoreSettingsStep = ({ settings, mirrors = [], primaryStorage, updateSettings, goNext, close, deviceId }: RestoreSettingsStepProps) => {\r\n const [showFileManager, setShowFileManager] = useState(false);\r\n const [showCustomPathError, setShowCustomPathError] = useState(false);\r\n\r\n const gotoPreviewStep = () => {\r\n if ((settings.type === 'custom' && settings.path) || settings.type === 'original') {\r\n goNext();\r\n } else {\r\n setShowCustomPathError(true);\r\n }\r\n };\r\n\r\n return (\r\n <div className={classes.stepContent}>\r\n <div className={classes.step}>\r\n {mirrors && mirrors.length > 0 && (\r\n <div className={classes.settingBlock}>\r\n <Select\r\n customClasses={classes.storageSelect}\r\n label=\"Select Storage to Restore From\"\r\n options={[\r\n {\r\n label: primaryStorage!.name + ' (Primary)',\r\n value: 'primary',\r\n image: <img src={`/providers/${primaryStorage.type}.png`} />,\r\n },\r\n ...mirrors.map((m) => ({\r\n label: m.storageName + ' (Mirror)',\r\n value: m.replicationId,\r\n image: <img src={`/providers/${m.storageType}.png`} />,\r\n })),\r\n ]}\r\n fieldValue={settings.replicationId || primaryStorage.id}\r\n full={true}\r\n onUpdate={(value) => updateSettings({ ...settings, replicationId: value === 'primary' ? undefined : value })}\r\n />\r\n </div>\r\n )}\r\n\r\n <div className={classes.settingBlock}>\r\n <Select\r\n label=\"Select where you want to restore the backup\"\r\n options={[\r\n { label: 'Restore to Original Path(s)', value: 'original' },\r\n { label: 'Restore to a Custom Path', value: 'custom' },\r\n ]}\r\n fieldValue={settings.type || 'original'}\r\n onUpdate={(val: string) => updateSettings({ ...settings, type: val as 'original' | 'custom' })}\r\n full={true}\r\n />\r\n </div>\r\n {settings.type === 'custom' && (\r\n <div className={`${classes.settingBlock} ${showCustomPathError ? classes.settingBlockError : ''}`}>\r\n <Input\r\n label=\"Restore Backup To\"\r\n placeholder=\"Restore Path\"\r\n fieldValue={settings.path}\r\n onUpdate={(val) => {\r\n updateSettings({ ...settings, path: val });\r\n if (showCustomPathError) {\r\n setShowCustomPathError(false);\r\n }\r\n }}\r\n full={true}\r\n />\r\n <button\r\n data-tooltip-id=\"appTooltip\"\r\n data-tooltip-content=\"Open FileManager to Select Path\"\r\n data-tooltip-place=\"top\"\r\n className={classes.fileManagerBtn}\r\n onClick={() => setShowFileManager(true)}\r\n >\r\n <Icon type=\"folders\" size={16} />\r\n </button>\r\n </div>\r\n )}\r\n\r\n <div className={classes.settingBlock}>\r\n <div className={classes.checkboxSettings}>\r\n <div className={classes.label}>Overwrite Policy</div>\r\n <div className={classes.checkboxSettingsOpts}>\r\n <div\r\n onClick={() => updateSettings({ ...settings, overwrite: 'always' })}\r\n className={` ${classes.checkboxOption} ${settings.overwrite === 'always' ? classes.checkboxOptionActive : ''} `}\r\n >\r\n <div>\r\n <Icon type={settings.overwrite === 'always' ? 'check-circle-filled' : 'check-circle'} size={16} />\r\n </div>\r\n <div>\r\n <h5>Always Overwrite (Default)</h5>\r\n <div>\r\n Always overwrites already existing files. Existing file content will be verified first and only mismatching parts will\r\n be restored to minimize downloads. Updates the metadata of all files.\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n onClick={() => updateSettings({ ...settings, overwrite: 'if-changed' })}\r\n className={` ${classes.checkboxOption} ${settings.overwrite === 'if-changed' ? classes.checkboxOptionActive : ''} `}\r\n >\r\n <div>\r\n <Icon type={settings.overwrite === 'if-changed' ? 'check-circle-filled' : 'check-circle'} size={16} />\r\n </div>\r\n <div>\r\n <h5>Overwrite If Changed</h5>\r\n <div>\r\n Like the previous case, but speeds up the file content check by assuming that files with matching size and modification\r\n time (mtime) are already up to date. In case of a mismatch, the full file content is verified. Updates the metadata of\r\n all files.\r\n </div>\r\n </div>\r\n </div>\r\n <div\r\n onClick={() => updateSettings({ ...settings, overwrite: 'if-newer' })}\r\n className={` ${classes.checkboxOption} ${settings.overwrite === 'if-newer' ? classes.checkboxOptionActive : ''} `}\r\n >\r\n <div>\r\n <Icon type={settings.overwrite === 'if-newer' ? 'check-circle-filled' : 'check-circle'} size={16} />\r\n </div>\r\n <div>\r\n <h5>Overwrite If Newer</h5>\r\n <div>Only overwrite existing files if the file in the snapshot has a newer modification time (mtime).</div>\r\n </div>\r\n </div>\r\n <div\r\n onClick={() => updateSettings({ ...settings, overwrite: 'never' })}\r\n className={` ${classes.checkboxOption} ${settings.overwrite === 'never' ? classes.checkboxOptionActive : ''} `}\r\n >\r\n <div>\r\n <Icon type={settings.overwrite === 'never' ? 'check-circle-filled' : 'check-circle'} size={16} />\r\n </div>\r\n <div>\r\n <h5>Never Overwrite</h5>\r\n <div>Never overwrite existing files.</div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n <div className={classes.settingBlock}>\r\n <Toggle\r\n label=\"Delete Files that are not in the Snapshot from the Target Restore Path\"\r\n fieldValue={settings.delete}\r\n inline={false}\r\n onUpdate={(val) => updateSettings({ ...settings, delete: val })}\r\n />\r\n </div>\r\n </div>\r\n <div className={classes.footer}>\r\n <div className={classes.footerLeft}></div>\r\n <div className={classes.footerRight}>\r\n <button onClick={() => close()}>Cancel</button>\r\n <button onClick={() => gotoPreviewStep()}>\r\n Next: Select Files to Restore <Icon type=\"arrow-right\" size={14} />\r\n </button>\r\n </div>\r\n </div>\r\n\r\n {showFileManager && (\r\n <FolderPicker\r\n deviceId={deviceId || 'main'}\r\n title=\"Choose a Path to Restore\"\r\n footerText=\"Select a Path where you want to restore your backup\"\r\n selected={settings.path}\r\n close={() => setShowFileManager(false)}\r\n onSelect={(p) => updateSettings({ ...settings, path: p })}\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default RestoreSettingsStep;\r\n"],"names":["RestoreSettingsStep","settings","mirrors","primaryStorage","updateSettings","goNext","close","deviceId","showFileManager","setShowFileManager","useState","showCustomPathError","setShowCustomPathError","gotoPreviewStep","jsxs","classes","jsx","Select","m","value","val","Input","Icon","Toggle","FolderPicker","p"],"mappings":"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"}
|
|
@@ -1,8 +1,12 @@
|
|
|
1
|
+
import { Backup, Plan } from '../../..';
|
|
1
2
|
interface RestoreWizardProps {
|
|
2
3
|
backupId: string;
|
|
3
4
|
planId: string;
|
|
5
|
+
deviceId: string;
|
|
6
|
+
planStorage: Plan['storage'];
|
|
7
|
+
mirrors?: Backup['mirrors'];
|
|
4
8
|
close: () => void;
|
|
5
9
|
}
|
|
6
|
-
declare const RestoreWizard: ({ backupId, planId, close }: RestoreWizardProps) => import("react/jsx-runtime").JSX.Element;
|
|
10
|
+
declare const RestoreWizard: ({ backupId, planId, deviceId, mirrors, planStorage, close }: RestoreWizardProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
11
|
export default RestoreWizard;
|
|
8
12
|
//# sourceMappingURL=RestoreWizard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RestoreWizard.d.ts","sourceRoot":"","sources":["../../../../src/components/Restore/RestoreWizard/RestoreWizard.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RestoreWizard.d.ts","sourceRoot":"","sources":["../../../../src/components/Restore/RestoreWizard/RestoreWizard.tsx"],"names":[],"mappings":"AAUA,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAExC,UAAU,kBAAkB;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC5B,KAAK,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,QAAA,MAAM,aAAa,GAAI,6DAA6D,kBAAkB,4CAuHrG,CAAC;AAEF,eAAe,aAAa,CAAC"}
|
|
@@ -1,115 +1,119 @@
|
|
|
1
1
|
import { jsx as t, jsxs as r } from "react/jsx-runtime";
|
|
2
|
-
import { useState as h, useMemo as
|
|
3
|
-
import { useIsFetching as
|
|
4
|
-
import
|
|
2
|
+
import { useState as h, useMemo as k } from "react";
|
|
3
|
+
import { useIsFetching as $, useIsMutating as C } from "@tanstack/react-query";
|
|
4
|
+
import n from "../../common/Icon/Icon.js";
|
|
5
5
|
import s from "./RestoreWizard.module.scss.js";
|
|
6
|
-
import
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import { useGetSnapshotFiles as
|
|
10
|
-
import
|
|
11
|
-
const
|
|
12
|
-
const [e,
|
|
6
|
+
import F from "./RestoreSettingsStep.js";
|
|
7
|
+
import B from "./RestorePreviewStep.js";
|
|
8
|
+
import M from "./RestoreConfirmStep.js";
|
|
9
|
+
import { useGetSnapshotFiles as W } from "../../../services/backups.js";
|
|
10
|
+
import j from "./RestoreFileSelectorStep.js";
|
|
11
|
+
const Q = ({ backupId: a, planId: g, deviceId: v, mirrors: y, planStorage: N, close: c }) => {
|
|
12
|
+
const [e, o] = h(1), [p, u] = h({
|
|
13
13
|
type: "original",
|
|
14
14
|
path: "",
|
|
15
15
|
overwrite: "always",
|
|
16
16
|
includes: [],
|
|
17
17
|
excludes: [],
|
|
18
|
-
delete: !1
|
|
19
|
-
|
|
18
|
+
delete: !1,
|
|
19
|
+
storageId: void 0
|
|
20
|
+
}), [S, z] = h({ stats: null, files: [] }), R = $(), w = C(), f = R > 0 || w > 0, { data: l, error: m } = W({ backupId: a }), d = l != null && l.result && Array.isArray(l.result) ? l.result : [], x = k(() => ({
|
|
20
21
|
total_files: d.length,
|
|
21
|
-
total_bytes: d.reduce((i,
|
|
22
|
+
total_bytes: d.reduce((i, P) => i + P.size, 0)
|
|
22
23
|
}), [d]);
|
|
23
24
|
return /* @__PURE__ */ t("div", { className: s.restoreWizard, children: /* @__PURE__ */ r("div", { className: s.content, style: { maxWidth: (e === 2 || e === 3) && 1200 || void 0 }, children: [
|
|
24
25
|
/* @__PURE__ */ r("div", { className: s.header, children: [
|
|
25
26
|
/* @__PURE__ */ r("h3", { children: [
|
|
26
|
-
/* @__PURE__ */ t(
|
|
27
|
+
/* @__PURE__ */ t(n, { type: "restore", size: 16 }),
|
|
27
28
|
" Restore Backup"
|
|
28
29
|
] }),
|
|
29
|
-
/* @__PURE__ */ t("button", { className: s.close, onClick: () => !f &&
|
|
30
|
+
/* @__PURE__ */ t("button", { className: s.close, onClick: () => !f && c(), children: /* @__PURE__ */ t(n, { type: "close", size: 24 }) })
|
|
30
31
|
] }),
|
|
31
32
|
/* @__PURE__ */ t("div", { className: s.steps, children: /* @__PURE__ */ r("ul", { children: [
|
|
32
33
|
/* @__PURE__ */ r("li", { className: ` ${e >= 1 ? s.stepCurrent : ""} ${e > 1 ? s.stepPassed : ""}`, children: [
|
|
33
34
|
/* @__PURE__ */ r("span", { children: [
|
|
34
|
-
e > 1 && /* @__PURE__ */ t(
|
|
35
|
+
e > 1 && /* @__PURE__ */ t(n, { type: "check", size: 11 }),
|
|
35
36
|
e === 1 ? "●" : ""
|
|
36
37
|
] }),
|
|
37
38
|
/* @__PURE__ */ t("i", { children: "Settings" })
|
|
38
39
|
] }),
|
|
39
40
|
/* @__PURE__ */ r("li", { className: ` ${e >= 2 ? s.stepCurrent : ""} ${e > 2 ? s.stepPassed : ""}`, children: [
|
|
40
41
|
/* @__PURE__ */ r("span", { children: [
|
|
41
|
-
e > 2 && /* @__PURE__ */ t(
|
|
42
|
+
e > 2 && /* @__PURE__ */ t(n, { type: "check", size: 11 }),
|
|
42
43
|
e === 2 ? "●" : ""
|
|
43
44
|
] }),
|
|
44
45
|
/* @__PURE__ */ t("i", { children: "Select Files" })
|
|
45
46
|
] }),
|
|
46
47
|
/* @__PURE__ */ r("li", { className: ` ${e >= 3 ? s.stepCurrent : ""} ${e > 3 ? s.stepPassed : ""}`, children: [
|
|
47
48
|
/* @__PURE__ */ r("span", { children: [
|
|
48
|
-
e > 3 && /* @__PURE__ */ t(
|
|
49
|
+
e > 3 && /* @__PURE__ */ t(n, { type: "check", size: 11 }),
|
|
49
50
|
e === 3 ? "●" : ""
|
|
50
51
|
] }),
|
|
51
52
|
/* @__PURE__ */ t("i", { children: "Preview" })
|
|
52
53
|
] }),
|
|
53
54
|
/* @__PURE__ */ r("li", { className: ` ${e === 4 ? s.stepCurrent : ""}`, children: [
|
|
54
|
-
/* @__PURE__ */ t("span", { children: e === 4 && /* @__PURE__ */ t(
|
|
55
|
+
/* @__PURE__ */ t("span", { children: e === 4 && /* @__PURE__ */ t(n, { type: "check", size: 11 }) }),
|
|
55
56
|
/* @__PURE__ */ t("i", { children: "Restore" })
|
|
56
57
|
] })
|
|
57
58
|
] }) }),
|
|
58
59
|
e === 1 && /* @__PURE__ */ t(
|
|
59
|
-
|
|
60
|
+
F,
|
|
60
61
|
{
|
|
61
|
-
backupId:
|
|
62
|
+
backupId: a,
|
|
63
|
+
deviceId: v,
|
|
62
64
|
settings: p,
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
65
|
+
primaryStorage: N,
|
|
66
|
+
mirrors: y,
|
|
67
|
+
updateSettings: (i) => u(i),
|
|
68
|
+
goNext: () => o(2),
|
|
69
|
+
close: c
|
|
66
70
|
}
|
|
67
71
|
),
|
|
68
72
|
e === 2 && /* @__PURE__ */ t(
|
|
69
|
-
|
|
73
|
+
j,
|
|
70
74
|
{
|
|
71
|
-
backupId:
|
|
75
|
+
backupId: a,
|
|
72
76
|
settings: p,
|
|
73
|
-
updateSettings: (i) =>
|
|
77
|
+
updateSettings: (i) => u(i),
|
|
74
78
|
files: d,
|
|
75
79
|
isLoading: f,
|
|
76
80
|
errorFetching: (m == null ? void 0 : m.message) || null,
|
|
77
81
|
currentStep: e,
|
|
78
|
-
goBack: () => e > 0 &&
|
|
79
|
-
goNext: () =>
|
|
80
|
-
close:
|
|
82
|
+
goBack: () => e > 0 && o(e - 1),
|
|
83
|
+
goNext: () => o(3),
|
|
84
|
+
close: c,
|
|
81
85
|
method: "backup"
|
|
82
86
|
}
|
|
83
87
|
),
|
|
84
88
|
e === 3 && /* @__PURE__ */ t(
|
|
85
|
-
|
|
89
|
+
B,
|
|
86
90
|
{
|
|
87
|
-
backupId:
|
|
88
|
-
planId:
|
|
91
|
+
backupId: a,
|
|
92
|
+
planId: g,
|
|
89
93
|
settings: p,
|
|
90
94
|
preview: S,
|
|
91
|
-
updatePreview: (i) =>
|
|
92
|
-
goBack: () => e > 0 &&
|
|
93
|
-
goNext: () =>
|
|
94
|
-
close:
|
|
95
|
+
updatePreview: (i) => z(i),
|
|
96
|
+
goBack: () => e > 0 && o(e - 1),
|
|
97
|
+
goNext: () => o(4),
|
|
98
|
+
close: c
|
|
95
99
|
}
|
|
96
100
|
),
|
|
97
101
|
e === 4 && /* @__PURE__ */ t(
|
|
98
|
-
|
|
102
|
+
M,
|
|
99
103
|
{
|
|
100
|
-
backupId:
|
|
101
|
-
planId:
|
|
104
|
+
backupId: a,
|
|
105
|
+
planId: g,
|
|
102
106
|
settings: p,
|
|
103
107
|
stats: S.stats,
|
|
104
|
-
snapshotsStats:
|
|
108
|
+
snapshotsStats: x,
|
|
105
109
|
method: "backup",
|
|
106
|
-
goBack: () => e > 0 &&
|
|
107
|
-
close:
|
|
110
|
+
goBack: () => e > 0 && o(e - 1),
|
|
111
|
+
close: c
|
|
108
112
|
}
|
|
109
113
|
)
|
|
110
114
|
] }) });
|
|
111
115
|
};
|
|
112
116
|
export {
|
|
113
|
-
|
|
117
|
+
Q as default
|
|
114
118
|
};
|
|
115
119
|
//# sourceMappingURL=RestoreWizard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RestoreWizard.js","sources":["../../../../src/components/Restore/RestoreWizard/RestoreWizard.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\r\nimport { useIsFetching, useIsMutating } from '@tanstack/react-query';\r\nimport Icon from '../../common/Icon/Icon';\r\nimport classes from './RestoreWizard.module.scss';\r\nimport RestoreSettingsStep from './RestoreSettingsStep';\r\nimport RestorePreviewStep from './RestorePreviewStep';\r\nimport RestoreConfirmStep from './RestoreConfirmStep';\r\nimport { RestoredFileItem, RestoredItemsStats, RestoreFileItem, RestoreSettings } from '../../../@types/restores';\r\nimport { useGetSnapshotFiles } from '../../../services/backups';\r\nimport RestoreFileSelectorStep from './RestoreFileSelectorStep';\r\n\r\ninterface RestoreWizardProps {\r\n backupId: string;\r\n planId: string;\r\n close: () => void;\r\n}\r\n\r\nconst RestoreWizard = ({ backupId, planId, close }: RestoreWizardProps) => {\r\n const [step, setStep] = useState(1);\r\n const [restoreSettings, setRestoreSettings] = useState<RestoreSettings>({\r\n type: 'original',\r\n path: '',\r\n overwrite: 'always',\r\n includes: [],\r\n excludes: [],\r\n delete: false,\r\n });\r\n const [restorePreview, setRestorePreview] = useState<{ stats: RestoredItemsStats | null; files: RestoredFileItem[] }>({ stats: null, files: [] });\r\n const isFetching = useIsFetching();\r\n const isMutating = useIsMutating();\r\n const isLoading = isFetching > 0 || isMutating > 0;\r\n const { data: snapshotData, error: snapShotError } = useGetSnapshotFiles({ backupId });\r\n const files: RestoreFileItem[] = snapshotData?.result && Array.isArray(snapshotData.result) ? snapshotData.result : [];\r\n\r\n const snapShotsStats = useMemo(() => {\r\n return {\r\n total_files: files.length,\r\n total_bytes: files.reduce((acc, file) => acc + file.size, 0),\r\n };\r\n }, [files]);\r\n\r\n return (\r\n <div className={classes.restoreWizard}>\r\n <div className={classes.content} style={{ maxWidth: ((step === 2 || step === 3) && 1200) || undefined }}>\r\n <div className={classes.header}>\r\n <h3>\r\n <Icon type=\"restore\" size={16} /> Restore Backup\r\n </h3>\r\n <button className={classes.close} onClick={() => !isLoading && close()}>\r\n <Icon type=\"close\" size={24} />\r\n </button>\r\n </div>\r\n <div className={classes.steps}>\r\n <ul>\r\n <li className={` ${step >= 1 ? classes.stepCurrent : ''} ${step > 1 ? classes.stepPassed : ''}`}>\r\n <span>\r\n {step > 1 && <Icon type=\"check\" size={11} />}\r\n {step === 1 ? '●' : ''}\r\n </span>\r\n <i>Settings</i>\r\n </li>\r\n <li className={` ${step >= 2 ? classes.stepCurrent : ''} ${step > 2 ? classes.stepPassed : ''}`}>\r\n <span>\r\n {step > 2 && <Icon type=\"check\" size={11} />}\r\n {step === 2 ? '●' : ''}\r\n </span>\r\n <i>Select Files</i>\r\n </li>\r\n <li className={` ${step >= 3 ? classes.stepCurrent : ''} ${step > 3 ? classes.stepPassed : ''}`}>\r\n <span>\r\n {step > 3 && <Icon type=\"check\" size={11} />}\r\n {step === 3 ? '●' : ''}\r\n </span>\r\n <i>Preview</i>\r\n </li>\r\n <li className={` ${step === 4 ? classes.stepCurrent : ''}`}>\r\n <span>{step === 4 && <Icon type=\"check\" size={11} />}</span>\r\n <i>Restore</i>\r\n </li>\r\n </ul>\r\n </div>\r\n {step === 1 && (\r\n <RestoreSettingsStep\r\n backupId={backupId}\r\n settings={restoreSettings}\r\n updateSettings={(settings) => setRestoreSettings(settings)}\r\n goNext={() => setStep(2)}\r\n close={close}\r\n />\r\n )}\r\n {step === 2 && (\r\n <RestoreFileSelectorStep\r\n backupId={backupId}\r\n settings={restoreSettings}\r\n updateSettings={(settings) => setRestoreSettings(settings as RestoreSettings)}\r\n files={files}\r\n isLoading={isLoading}\r\n errorFetching={snapShotError?.message || null}\r\n currentStep={step}\r\n goBack={() => step > 0 && setStep(step - 1)}\r\n goNext={() => setStep(3)}\r\n close={close}\r\n method=\"backup\"\r\n />\r\n )}\r\n {step === 3 && (\r\n <RestorePreviewStep\r\n backupId={backupId}\r\n planId={planId}\r\n settings={restoreSettings}\r\n preview={restorePreview}\r\n updatePreview={(preview) => setRestorePreview(preview)}\r\n goBack={() => step > 0 && setStep(step - 1)}\r\n goNext={() => setStep(4)}\r\n close={close}\r\n />\r\n )}\r\n {step === 4 && (\r\n <RestoreConfirmStep\r\n backupId={backupId}\r\n planId={planId}\r\n settings={restoreSettings}\r\n stats={restorePreview.stats}\r\n snapshotsStats={snapShotsStats}\r\n method=\"backup\"\r\n goBack={() => step > 0 && setStep(step - 1)}\r\n close={close}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default RestoreWizard;\r\n"],"names":["RestoreWizard","backupId","planId","close","step","setStep","useState","restoreSettings","setRestoreSettings","restorePreview","setRestorePreview","isFetching","useIsFetching","isMutating","useIsMutating","isLoading","snapshotData","snapShotError","useGetSnapshotFiles","files","snapShotsStats","useMemo","acc","file","classes","jsxs","jsx","Icon","RestoreSettingsStep","settings","RestoreFileSelectorStep","RestorePreviewStep","preview","RestoreConfirmStep"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"RestoreWizard.js","sources":["../../../../src/components/Restore/RestoreWizard/RestoreWizard.tsx"],"sourcesContent":["import { useMemo, useState } from 'react';\r\nimport { useIsFetching, useIsMutating } from '@tanstack/react-query';\r\nimport Icon from '../../common/Icon/Icon';\r\nimport classes from './RestoreWizard.module.scss';\r\nimport RestoreSettingsStep from './RestoreSettingsStep';\r\nimport RestorePreviewStep from './RestorePreviewStep';\r\nimport RestoreConfirmStep from './RestoreConfirmStep';\r\nimport { RestoredFileItem, RestoredItemsStats, RestoreFileItem, RestoreSettings } from '../../../@types/restores';\r\nimport { useGetSnapshotFiles } from '../../../services/backups';\r\nimport RestoreFileSelectorStep from './RestoreFileSelectorStep';\r\nimport { Backup, Plan } from '../../..';\r\n\r\ninterface RestoreWizardProps {\r\n backupId: string;\r\n planId: string;\r\n deviceId: string;\r\n planStorage: Plan['storage'];\r\n mirrors?: Backup['mirrors'];\r\n close: () => void;\r\n}\r\n\r\nconst RestoreWizard = ({ backupId, planId, deviceId, mirrors, planStorage, close }: RestoreWizardProps) => {\r\n const [step, setStep] = useState(1);\r\n const [restoreSettings, setRestoreSettings] = useState<RestoreSettings>({\r\n type: 'original',\r\n path: '',\r\n overwrite: 'always',\r\n includes: [],\r\n excludes: [],\r\n delete: false,\r\n storageId: undefined,\r\n });\r\n const [restorePreview, setRestorePreview] = useState<{ stats: RestoredItemsStats | null; files: RestoredFileItem[] }>({ stats: null, files: [] });\r\n const isFetching = useIsFetching();\r\n const isMutating = useIsMutating();\r\n const isLoading = isFetching > 0 || isMutating > 0;\r\n const { data: snapshotData, error: snapShotError } = useGetSnapshotFiles({ backupId });\r\n const files: RestoreFileItem[] = snapshotData?.result && Array.isArray(snapshotData.result) ? snapshotData.result : [];\r\n\r\n const snapShotsStats = useMemo(() => {\r\n return {\r\n total_files: files.length,\r\n total_bytes: files.reduce((acc, file) => acc + file.size, 0),\r\n };\r\n }, [files]);\r\n\r\n return (\r\n <div className={classes.restoreWizard}>\r\n <div className={classes.content} style={{ maxWidth: ((step === 2 || step === 3) && 1200) || undefined }}>\r\n <div className={classes.header}>\r\n <h3>\r\n <Icon type=\"restore\" size={16} /> Restore Backup\r\n </h3>\r\n <button className={classes.close} onClick={() => !isLoading && close()}>\r\n <Icon type=\"close\" size={24} />\r\n </button>\r\n </div>\r\n <div className={classes.steps}>\r\n <ul>\r\n <li className={` ${step >= 1 ? classes.stepCurrent : ''} ${step > 1 ? classes.stepPassed : ''}`}>\r\n <span>\r\n {step > 1 && <Icon type=\"check\" size={11} />}\r\n {step === 1 ? '●' : ''}\r\n </span>\r\n <i>Settings</i>\r\n </li>\r\n <li className={` ${step >= 2 ? classes.stepCurrent : ''} ${step > 2 ? classes.stepPassed : ''}`}>\r\n <span>\r\n {step > 2 && <Icon type=\"check\" size={11} />}\r\n {step === 2 ? '●' : ''}\r\n </span>\r\n <i>Select Files</i>\r\n </li>\r\n <li className={` ${step >= 3 ? classes.stepCurrent : ''} ${step > 3 ? classes.stepPassed : ''}`}>\r\n <span>\r\n {step > 3 && <Icon type=\"check\" size={11} />}\r\n {step === 3 ? '●' : ''}\r\n </span>\r\n <i>Preview</i>\r\n </li>\r\n <li className={` ${step === 4 ? classes.stepCurrent : ''}`}>\r\n <span>{step === 4 && <Icon type=\"check\" size={11} />}</span>\r\n <i>Restore</i>\r\n </li>\r\n </ul>\r\n </div>\r\n {step === 1 && (\r\n <RestoreSettingsStep\r\n backupId={backupId}\r\n deviceId={deviceId}\r\n settings={restoreSettings}\r\n primaryStorage={planStorage}\r\n mirrors={mirrors}\r\n updateSettings={(settings) => setRestoreSettings(settings)}\r\n goNext={() => setStep(2)}\r\n close={close}\r\n />\r\n )}\r\n {step === 2 && (\r\n <RestoreFileSelectorStep\r\n backupId={backupId}\r\n settings={restoreSettings}\r\n updateSettings={(settings) => setRestoreSettings(settings as RestoreSettings)}\r\n files={files}\r\n isLoading={isLoading}\r\n errorFetching={snapShotError?.message || null}\r\n currentStep={step}\r\n goBack={() => step > 0 && setStep(step - 1)}\r\n goNext={() => setStep(3)}\r\n close={close}\r\n method=\"backup\"\r\n />\r\n )}\r\n {step === 3 && (\r\n <RestorePreviewStep\r\n backupId={backupId}\r\n planId={planId}\r\n settings={restoreSettings}\r\n preview={restorePreview}\r\n updatePreview={(preview) => setRestorePreview(preview)}\r\n goBack={() => step > 0 && setStep(step - 1)}\r\n goNext={() => setStep(4)}\r\n close={close}\r\n />\r\n )}\r\n {step === 4 && (\r\n <RestoreConfirmStep\r\n backupId={backupId}\r\n planId={planId}\r\n settings={restoreSettings}\r\n stats={restorePreview.stats}\r\n snapshotsStats={snapShotsStats}\r\n method=\"backup\"\r\n goBack={() => step > 0 && setStep(step - 1)}\r\n close={close}\r\n />\r\n )}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default RestoreWizard;\r\n"],"names":["RestoreWizard","backupId","planId","deviceId","mirrors","planStorage","close","step","setStep","useState","restoreSettings","setRestoreSettings","restorePreview","setRestorePreview","isFetching","useIsFetching","isMutating","useIsMutating","isLoading","snapshotData","snapShotError","useGetSnapshotFiles","files","snapShotsStats","useMemo","acc","file","classes","jsxs","jsx","Icon","RestoreSettingsStep","settings","RestoreFileSelectorStep","RestorePreviewStep","preview","RestoreConfirmStep"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
const t = "
|
|
1
|
+
const t = "_restoreWizard_wOgi9", e = "_content_nSjit", o = "_header_Vkxq0", r = "_close_8GR4N", s = "_steps_Pby13", n = "_stepCurrent_8yTis", c = "_stepPassed_8Zj6o", _ = "_stepContent_kTqdE", i = "_step_Hn0FW", p = "_settingBlock_7GPIv", a = "_label_dK7yV", l = "_fileManagerBtn_mY14R", b = "_settingBlockError_rsQRx", k = "_preview_GNDQl", g = "_previewError_j2xz9", x = "_previewButton_mrCKR", h = "_previewEmpty_qW6AM", B = "_restoreConfirm_n6NRE", d = "_restoreButton_yzxcd", v = "_restoreError_S2Gmn", E = "_footer_ypHCA", f = "_backButton_rPUX7", u = "_footerRight_XfMMx", w = "_restoreDisabled_N1CZT", C = "_checkboxSettings_NAeEi", m = "_checkboxSettingsOpts_rglV2", O = "_checkboxOption_4bmMx", R = "_checkboxOptionActive_RNL3I", y = {
|
|
2
2
|
restoreWizard: t,
|
|
3
3
|
content: e,
|
|
4
4
|
header: o,
|
|
5
|
-
close:
|
|
6
|
-
steps:
|
|
5
|
+
close: r,
|
|
6
|
+
steps: s,
|
|
7
7
|
stepCurrent: n,
|
|
8
8
|
stepPassed: c,
|
|
9
9
|
stepContent: _,
|
|
@@ -11,52 +11,52 @@ const t = "_restoreWizard_sFTj0", e = "_content_pzve9", o = "_header_lVx7o", s =
|
|
|
11
11
|
settingBlock: p,
|
|
12
12
|
label: a,
|
|
13
13
|
fileManagerBtn: l,
|
|
14
|
-
settingBlockError:
|
|
15
|
-
preview:
|
|
16
|
-
previewError:
|
|
17
|
-
previewButton:
|
|
18
|
-
previewEmpty:
|
|
19
|
-
restoreConfirm:
|
|
20
|
-
restoreButton:
|
|
21
|
-
restoreError:
|
|
22
|
-
footer:
|
|
23
|
-
backButton:
|
|
14
|
+
settingBlockError: b,
|
|
15
|
+
preview: k,
|
|
16
|
+
previewError: g,
|
|
17
|
+
previewButton: x,
|
|
18
|
+
previewEmpty: h,
|
|
19
|
+
restoreConfirm: B,
|
|
20
|
+
restoreButton: d,
|
|
21
|
+
restoreError: v,
|
|
22
|
+
footer: E,
|
|
23
|
+
backButton: f,
|
|
24
24
|
footerRight: u,
|
|
25
25
|
restoreDisabled: w,
|
|
26
26
|
checkboxSettings: C,
|
|
27
|
-
checkboxSettingsOpts:
|
|
28
|
-
checkboxOption:
|
|
29
|
-
checkboxOptionActive:
|
|
27
|
+
checkboxSettingsOpts: m,
|
|
28
|
+
checkboxOption: O,
|
|
29
|
+
checkboxOptionActive: R
|
|
30
30
|
};
|
|
31
31
|
export {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
32
|
+
f as backButton,
|
|
33
|
+
O as checkboxOption,
|
|
34
|
+
R as checkboxOptionActive,
|
|
35
35
|
C as checkboxSettings,
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
m as checkboxSettingsOpts,
|
|
37
|
+
r as close,
|
|
38
38
|
e as content,
|
|
39
|
-
|
|
39
|
+
y as default,
|
|
40
40
|
l as fileManagerBtn,
|
|
41
|
-
|
|
41
|
+
E as footer,
|
|
42
42
|
u as footerRight,
|
|
43
43
|
o as header,
|
|
44
44
|
a as label,
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
45
|
+
k as preview,
|
|
46
|
+
x as previewButton,
|
|
47
|
+
h as previewEmpty,
|
|
48
|
+
g as previewError,
|
|
49
|
+
d as restoreButton,
|
|
50
|
+
B as restoreConfirm,
|
|
51
51
|
w as restoreDisabled,
|
|
52
|
-
|
|
52
|
+
v as restoreError,
|
|
53
53
|
t as restoreWizard,
|
|
54
54
|
p as settingBlock,
|
|
55
|
-
|
|
55
|
+
b as settingBlockError,
|
|
56
56
|
i as step,
|
|
57
57
|
_ as stepContent,
|
|
58
58
|
n as stepCurrent,
|
|
59
59
|
c as stepPassed,
|
|
60
|
-
|
|
60
|
+
s as steps
|
|
61
61
|
};
|
|
62
62
|
//# sourceMappingURL=RestoreWizard.module.scss.js.map
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { jsxs as c, jsx as a } from "react/jsx-runtime";
|
|
2
2
|
import { useTheme as n } from "../../../context/ThemeContext.js";
|
|
3
3
|
import m from "../../common/form/Input/Input.js";
|
|
4
|
-
import
|
|
4
|
+
import f from "../../common/form/Tristate/Tristate.js";
|
|
5
5
|
import d from "./GeneralSettings.module.scss.js";
|
|
6
|
-
const t = ({ settings:
|
|
7
|
-
const { setTheme: o } = n(), r = (
|
|
8
|
-
o(
|
|
6
|
+
const t = ({ settings: l, onUpdate: i }) => {
|
|
7
|
+
const { setTheme: o } = n(), r = (e) => {
|
|
8
|
+
o(e), i({ ...l, theme: e });
|
|
9
9
|
};
|
|
10
10
|
return /* @__PURE__ */ c("div", { children: [
|
|
11
11
|
/* @__PURE__ */ a("div", { className: d.field, children: /* @__PURE__ */ a(
|
|
12
12
|
m,
|
|
13
13
|
{
|
|
14
14
|
label: "App Instance Title",
|
|
15
|
-
fieldValue: (
|
|
16
|
-
onUpdate: (
|
|
15
|
+
fieldValue: (l == null ? void 0 : l.title) || "",
|
|
16
|
+
onUpdate: (e) => i({ ...l, title: e }),
|
|
17
17
|
inline: !1
|
|
18
18
|
}
|
|
19
19
|
) }),
|
|
@@ -21,8 +21,8 @@ const t = ({ settings: e, onUpdate: i }) => {
|
|
|
21
21
|
m,
|
|
22
22
|
{
|
|
23
23
|
label: "App Instance Description",
|
|
24
|
-
fieldValue: (
|
|
25
|
-
onUpdate: (
|
|
24
|
+
fieldValue: (l == null ? void 0 : l.description) || "",
|
|
25
|
+
onUpdate: (e) => i({ ...l, description: e }),
|
|
26
26
|
inline: !1
|
|
27
27
|
}
|
|
28
28
|
) }),
|
|
@@ -30,25 +30,25 @@ const t = ({ settings: e, onUpdate: i }) => {
|
|
|
30
30
|
m,
|
|
31
31
|
{
|
|
32
32
|
label: "Admin Email",
|
|
33
|
-
fieldValue:
|
|
34
|
-
onUpdate: (
|
|
33
|
+
fieldValue: l.admin_email || "",
|
|
34
|
+
onUpdate: (e) => i({ ...l, admin_email: e }),
|
|
35
35
|
type: "email",
|
|
36
36
|
placeholder: "johndoe@mail.com",
|
|
37
37
|
inline: !1
|
|
38
38
|
}
|
|
39
39
|
) }),
|
|
40
40
|
/* @__PURE__ */ a("div", { className: d.field, children: /* @__PURE__ */ a(
|
|
41
|
-
|
|
41
|
+
f,
|
|
42
42
|
{
|
|
43
43
|
label: "Color Scheme",
|
|
44
|
-
fieldValue:
|
|
44
|
+
fieldValue: l.theme,
|
|
45
45
|
options: [
|
|
46
46
|
{ label: "Auto", value: "auto" },
|
|
47
47
|
{ label: "Dark", value: "dark" },
|
|
48
48
|
{ label: "Light", value: "light" }
|
|
49
49
|
],
|
|
50
|
-
onUpdate: (
|
|
51
|
-
inline: !
|
|
50
|
+
onUpdate: (e) => r(e),
|
|
51
|
+
inline: !1
|
|
52
52
|
}
|
|
53
53
|
) })
|
|
54
54
|
] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GeneralSettings.js","sources":["../../../../src/components/Settings/GeneralSettings/GeneralSettings.tsx"],"sourcesContent":["import { useTheme } from '../../../context/ThemeContext';\r\nimport Input from '../../common/form/Input/Input';\r\nimport Tristate from '../../common/form/Tristate/Tristate';\r\nimport classes from './GeneralSettings.module.scss';\r\n\r\ninterface GeneralSettingsProps {\r\n settingsID: number;\r\n settings: Record<string, any>;\r\n onUpdate: (settings: Record<string, any>) => void;\r\n}\r\n\r\nconst GeneralSettings = ({ settings, onUpdate }: GeneralSettingsProps) => {\r\n const { setTheme } = useTheme();\r\n\r\n const handleThemeChange = (newThemeValue: 'auto' | 'light' | 'dark') => {\r\n setTheme(newThemeValue);\r\n onUpdate({ ...settings, theme: newThemeValue });\r\n };\r\n\r\n return (\r\n <div>\r\n <div className={classes.field}>\r\n <Input\r\n label=\"App Instance Title\"\r\n fieldValue={(settings?.title || '') as string}\r\n onUpdate={(val) => onUpdate({ ...settings, title: val })}\r\n inline={false}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <Input\r\n label=\"App Instance Description\"\r\n fieldValue={(settings?.description || '') as string}\r\n onUpdate={(val) => onUpdate({ ...settings, description: val })}\r\n inline={false}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <Input\r\n label=\"Admin Email\"\r\n fieldValue={settings.admin_email || ''}\r\n onUpdate={(val) => onUpdate({ ...settings, admin_email: val })}\r\n type=\"email\"\r\n placeholder=\"johndoe@mail.com\"\r\n inline={false}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <Tristate\r\n label=\"Color Scheme\"\r\n fieldValue={settings.theme as string}\r\n options={[\r\n { label: 'Auto', value: 'auto' },\r\n { label: 'Dark', value: 'dark' },\r\n { label: 'Light', value: 'light' },\r\n ]}\r\n onUpdate={(val: string) => handleThemeChange(val as 'auto' | 'light' | 'dark')}\r\n inline={
|
|
1
|
+
{"version":3,"file":"GeneralSettings.js","sources":["../../../../src/components/Settings/GeneralSettings/GeneralSettings.tsx"],"sourcesContent":["import { useTheme } from '../../../context/ThemeContext';\r\nimport Input from '../../common/form/Input/Input';\r\nimport Tristate from '../../common/form/Tristate/Tristate';\r\nimport classes from './GeneralSettings.module.scss';\r\n\r\ninterface GeneralSettingsProps {\r\n settingsID: number;\r\n settings: Record<string, any>;\r\n onUpdate: (settings: Record<string, any>) => void;\r\n}\r\n\r\nconst GeneralSettings = ({ settings, onUpdate }: GeneralSettingsProps) => {\r\n const { setTheme } = useTheme();\r\n\r\n const handleThemeChange = (newThemeValue: 'auto' | 'light' | 'dark') => {\r\n setTheme(newThemeValue);\r\n onUpdate({ ...settings, theme: newThemeValue });\r\n };\r\n\r\n return (\r\n <div>\r\n <div className={classes.field}>\r\n <Input\r\n label=\"App Instance Title\"\r\n fieldValue={(settings?.title || '') as string}\r\n onUpdate={(val) => onUpdate({ ...settings, title: val })}\r\n inline={false}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <Input\r\n label=\"App Instance Description\"\r\n fieldValue={(settings?.description || '') as string}\r\n onUpdate={(val) => onUpdate({ ...settings, description: val })}\r\n inline={false}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <Input\r\n label=\"Admin Email\"\r\n fieldValue={settings.admin_email || ''}\r\n onUpdate={(val) => onUpdate({ ...settings, admin_email: val })}\r\n type=\"email\"\r\n placeholder=\"johndoe@mail.com\"\r\n inline={false}\r\n />\r\n </div>\r\n <div className={classes.field}>\r\n <Tristate\r\n label=\"Color Scheme\"\r\n fieldValue={settings.theme as string}\r\n options={[\r\n { label: 'Auto', value: 'auto' },\r\n { label: 'Dark', value: 'dark' },\r\n { label: 'Light', value: 'light' },\r\n ]}\r\n onUpdate={(val: string) => handleThemeChange(val as 'auto' | 'light' | 'dark')}\r\n inline={false}\r\n />\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport default GeneralSettings;\r\n"],"names":["GeneralSettings","settings","onUpdate","setTheme","useTheme","handleThemeChange","newThemeValue","jsx","classes","Input","val","Tristate"],"mappings":";;;;;AAWA,MAAMA,IAAkB,CAAC,EAAE,UAAAC,GAAU,UAAAC,QAAqC;AACvE,QAAM,EAAE,UAAAC,EAAA,IAAaC,EAAA,GAEfC,IAAoB,CAACC,MAA6C;AACrE,IAAAH,EAASG,CAAa,GACtBJ,EAAS,EAAE,GAAGD,GAAU,OAAOK,GAAe;AAAA,EACjD;AAEA,2BACI,OAAA,EACE,UAAA;AAAA,IAAA,gBAAAC,EAAC,OAAA,EAAI,WAAWC,EAAQ,OACrB,UAAA,gBAAAD;AAAA,MAACE;AAAA,MAAA;AAAA,QACE,OAAM;AAAA,QACN,aAAaR,KAAA,gBAAAA,EAAU,UAAS;AAAA,QAChC,UAAU,CAACS,MAAQR,EAAS,EAAE,GAAGD,GAAU,OAAOS,GAAK;AAAA,QACvD,QAAQ;AAAA,MAAA;AAAA,IAAA,GAEd;AAAA,IACA,gBAAAH,EAAC,OAAA,EAAI,WAAWC,EAAQ,OACrB,UAAA,gBAAAD;AAAA,MAACE;AAAA,MAAA;AAAA,QACE,OAAM;AAAA,QACN,aAAaR,KAAA,gBAAAA,EAAU,gBAAe;AAAA,QACtC,UAAU,CAACS,MAAQR,EAAS,EAAE,GAAGD,GAAU,aAAaS,GAAK;AAAA,QAC7D,QAAQ;AAAA,MAAA;AAAA,IAAA,GAEd;AAAA,IACA,gBAAAH,EAAC,OAAA,EAAI,WAAWC,EAAQ,OACrB,UAAA,gBAAAD;AAAA,MAACE;AAAA,MAAA;AAAA,QACE,OAAM;AAAA,QACN,YAAYR,EAAS,eAAe;AAAA,QACpC,UAAU,CAACS,MAAQR,EAAS,EAAE,GAAGD,GAAU,aAAaS,GAAK;AAAA,QAC7D,MAAK;AAAA,QACL,aAAY;AAAA,QACZ,QAAQ;AAAA,MAAA;AAAA,IAAA,GAEd;AAAA,IACA,gBAAAH,EAAC,OAAA,EAAI,WAAWC,EAAQ,OACrB,UAAA,gBAAAD;AAAA,MAACI;AAAA,MAAA;AAAA,QACE,OAAM;AAAA,QACN,YAAYV,EAAS;AAAA,QACrB,SAAS;AAAA,UACN,EAAE,OAAO,QAAQ,OAAO,OAAA;AAAA,UACxB,EAAE,OAAO,QAAQ,OAAO,OAAA;AAAA,UACxB,EAAE,OAAO,SAAS,OAAO,QAAA;AAAA,QAAQ;AAAA,QAEpC,UAAU,CAACS,MAAgBL,EAAkBK,CAAgC;AAAA,QAC7E,QAAQ;AAAA,MAAA;AAAA,IAAA,EACX,CACH;AAAA,EAAA,GACH;AAEN;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IntegrationSettings.d.ts","sourceRoot":"","sources":["../../../../src/components/Settings/IntegrationSettings/IntegrationSettings.tsx"],"names":[],"mappings":"AAOA,UAAU,wBAAwB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,QAAQ,EAAE,CAAC,QAAQ,EAAE,wBAAwB,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;CACrE;AAED,QAAA,MAAM,mBAAmB,GAAI,oCAAoC,wBAAwB,
|
|
1
|
+
{"version":3,"file":"IntegrationSettings.d.ts","sourceRoot":"","sources":["../../../../src/components/Settings/IntegrationSettings/IntegrationSettings.tsx"],"names":[],"mappings":"AAOA,UAAU,wBAAwB;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC9B,QAAQ,EAAE,CAAC,QAAQ,EAAE,wBAAwB,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC;CACrE;AAED,QAAA,MAAM,mBAAmB,GAAI,oCAAoC,wBAAwB,4CAqDxF,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -1,47 +1,56 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import { useState as
|
|
3
|
-
import
|
|
1
|
+
import { jsxs as M, jsx as e, Fragment as T } from "react/jsx-runtime";
|
|
2
|
+
import { useState as m } from "react";
|
|
3
|
+
import h from "./IntegrationSettings.module.scss.js";
|
|
4
4
|
import S from "../../common/form/Input/Input.js";
|
|
5
|
-
import
|
|
6
|
-
import { useValidateIntegration as
|
|
7
|
-
import
|
|
8
|
-
const
|
|
5
|
+
import I from "../../common/ActionModal/ActionModal.js";
|
|
6
|
+
import { useValidateIntegration as E } from "../../../services/settings.js";
|
|
7
|
+
import v from "./SMTPSettings.js";
|
|
8
|
+
const V = ({ settingsID: c, settings: o, onUpdate: d }) => {
|
|
9
9
|
var l;
|
|
10
|
-
const [
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
const [n, p] = m(""), [g, a] = m(""), i = (o == null ? void 0 : o.integration) || {}, { smtp: u } = i || {}, s = E(), f = (t, r) => {
|
|
11
|
+
console.log("onIntegrationUpdate :", t, r), d({ ...i, [t]: { ...i[t], ...r } });
|
|
12
|
+
};
|
|
13
|
+
return /* @__PURE__ */ M("div", { className: h.integrations, children: [
|
|
14
|
+
/* @__PURE__ */ e("div", { children: /* @__PURE__ */ e(
|
|
15
|
+
v,
|
|
16
|
+
{
|
|
17
|
+
settings: u,
|
|
18
|
+
onUpdate: (t) => f("smtp", t),
|
|
19
|
+
showTestModal: (t) => a(t)
|
|
20
|
+
}
|
|
21
|
+
) }),
|
|
22
|
+
g && /* @__PURE__ */ e(
|
|
23
|
+
I,
|
|
15
24
|
{
|
|
16
25
|
title: "Test SMTP Integration",
|
|
17
|
-
message: /* @__PURE__ */
|
|
26
|
+
message: /* @__PURE__ */ e(T, { children: /* @__PURE__ */ e(
|
|
18
27
|
S,
|
|
19
28
|
{
|
|
20
29
|
label: "Send Test Email to this email",
|
|
21
30
|
full: !0,
|
|
22
|
-
fieldValue:
|
|
23
|
-
onUpdate: (
|
|
31
|
+
fieldValue: n,
|
|
32
|
+
onUpdate: (t) => p(t),
|
|
24
33
|
type: "email",
|
|
25
34
|
placeholder: "test@test.com"
|
|
26
35
|
}
|
|
27
36
|
) }),
|
|
28
37
|
errorMessage: (l = s.error) == null ? void 0 : l.message,
|
|
29
38
|
successMessage: s.isSuccess ? "Test email sent. Integration validated successfully." : "",
|
|
30
|
-
closeModal: () =>
|
|
39
|
+
closeModal: () => a(""),
|
|
31
40
|
width: "400px",
|
|
32
|
-
secondaryAction: { title: "Close", action: () =>
|
|
41
|
+
secondaryAction: { title: "Close", action: () => a("") },
|
|
33
42
|
primaryAction: {
|
|
34
43
|
title: "Send Test Email",
|
|
35
44
|
type: "default",
|
|
36
45
|
icon: "email",
|
|
37
46
|
isPending: s.isPending,
|
|
38
|
-
action: () => s.mutate({ settingsID:
|
|
47
|
+
action: () => s.mutate({ settingsID: c, type: "smtp", settings: o, test: { email: n } })
|
|
39
48
|
}
|
|
40
49
|
}
|
|
41
50
|
)
|
|
42
51
|
] });
|
|
43
52
|
};
|
|
44
53
|
export {
|
|
45
|
-
|
|
54
|
+
V as default
|
|
46
55
|
};
|
|
47
56
|
//# sourceMappingURL=IntegrationSettings.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IntegrationSettings.js","sources":["../../../../src/components/Settings/IntegrationSettings/IntegrationSettings.tsx"],"sourcesContent":["import { useState } from 'react';\r\nimport classes from './IntegrationSettings.module.scss';\r\nimport Input from '../../common/form/Input/Input';\r\nimport ActionModal from '../../common/ActionModal/ActionModal';\r\nimport { useValidateIntegration } from '../../../services/settings';\r\nimport SMTPSettings from './SMTPSettings';\r\n\r\ninterface IntegrationSettingsProps {\r\n settingsID: number;\r\n settings: Record<string, any>;\r\n onUpdate: (settings: IntegrationSettingsProps['settings']) => void;\r\n}\r\n\r\nconst IntegrationSettings = ({ settingsID, settings, onUpdate }: IntegrationSettingsProps) => {\r\n const [testEmail, setTestEmail] = useState('');\r\n const [showEmailTestModal, setShowEmailTestModal] = useState<'' | 'smtp'>('');\r\n const integrationSettings = settings?.integration || {};\r\n const { smtp } = integrationSettings || {};\r\n\r\n const validationMutation = useValidateIntegration();\r\n\r\n console.log('
|
|
1
|
+
{"version":3,"file":"IntegrationSettings.js","sources":["../../../../src/components/Settings/IntegrationSettings/IntegrationSettings.tsx"],"sourcesContent":["import { useState } from 'react';\r\nimport classes from './IntegrationSettings.module.scss';\r\nimport Input from '../../common/form/Input/Input';\r\nimport ActionModal from '../../common/ActionModal/ActionModal';\r\nimport { useValidateIntegration } from '../../../services/settings';\r\nimport SMTPSettings from './SMTPSettings';\r\n\r\ninterface IntegrationSettingsProps {\r\n settingsID: number;\r\n settings: Record<string, any>;\r\n onUpdate: (settings: IntegrationSettingsProps['settings']) => void;\r\n}\r\n\r\nconst IntegrationSettings = ({ settingsID, settings, onUpdate }: IntegrationSettingsProps) => {\r\n const [testEmail, setTestEmail] = useState('');\r\n const [showEmailTestModal, setShowEmailTestModal] = useState<'' | 'smtp'>('');\r\n const integrationSettings = settings?.integration || {};\r\n const { smtp } = integrationSettings || {};\r\n\r\n const validationMutation = useValidateIntegration();\r\n\r\n const onIntegrationUpdate = (key: string, intSettings: Record<string, any>) => {\r\n console.log('onIntegrationUpdate :', key, intSettings);\r\n onUpdate({ ...integrationSettings, [key]: { ...integrationSettings[key], ...intSettings } });\r\n };\r\n\r\n return (\r\n <div className={classes.integrations}>\r\n <div>\r\n <SMTPSettings\r\n settings={smtp}\r\n onUpdate={(iSettings) => onIntegrationUpdate('smtp', iSettings)}\r\n showTestModal={(type) => setShowEmailTestModal(type)}\r\n />\r\n </div>\r\n {showEmailTestModal && (\r\n <ActionModal\r\n title={`Test SMTP Integration`}\r\n message={\r\n <>\r\n <Input\r\n label=\"Send Test Email to this email\"\r\n full={true}\r\n fieldValue={testEmail}\r\n onUpdate={(val) => setTestEmail(val)}\r\n type=\"email\"\r\n placeholder=\"test@test.com\"\r\n />\r\n </>\r\n }\r\n errorMessage={validationMutation.error?.message}\r\n successMessage={validationMutation.isSuccess ? 'Test email sent. Integration validated successfully.' : ''}\r\n closeModal={() => setShowEmailTestModal('')}\r\n width=\"400px\"\r\n secondaryAction={{ title: 'Close', action: () => setShowEmailTestModal('') }}\r\n primaryAction={{\r\n title: `Send Test Email`,\r\n type: 'default',\r\n icon: 'email',\r\n isPending: validationMutation.isPending,\r\n action: () => validationMutation.mutate({ settingsID, type: 'smtp', settings: settings, test: { email: testEmail } }),\r\n }}\r\n />\r\n )}\r\n </div>\r\n );\r\n};\r\n\r\nexport default IntegrationSettings;\r\n"],"names":["IntegrationSettings","settingsID","settings","onUpdate","testEmail","setTestEmail","useState","showEmailTestModal","setShowEmailTestModal","integrationSettings","smtp","validationMutation","useValidateIntegration","onIntegrationUpdate","key","intSettings","jsxs","classes","jsx","SMTPSettings","iSettings","type","ActionModal","Fragment","Input","val","_a"],"mappings":";;;;;;;AAaA,MAAMA,IAAsB,CAAC,EAAE,YAAAC,GAAY,UAAAC,GAAU,UAAAC,QAAyC;;AAC3F,QAAM,CAACC,GAAWC,CAAY,IAAIC,EAAS,EAAE,GACvC,CAACC,GAAoBC,CAAqB,IAAIF,EAAsB,EAAE,GACtEG,KAAsBP,KAAA,gBAAAA,EAAU,gBAAe,CAAA,GAC/C,EAAE,MAAAQ,MAASD,KAAuB,CAAA,GAElCE,IAAqBC,EAAA,GAErBC,IAAsB,CAACC,GAAaC,MAAqC;AAC5E,YAAQ,IAAI,yBAAyBD,GAAKC,CAAW,GACrDZ,EAAS,EAAE,GAAGM,GAAqB,CAACK,CAAG,GAAG,EAAE,GAAGL,EAAoBK,CAAG,GAAG,GAAGC,EAAA,GAAe;AAAA,EAC9F;AAEA,SACG,gBAAAC,EAAC,OAAA,EAAI,WAAWC,EAAQ,cACrB,UAAA;AAAA,IAAA,gBAAAC,EAAC,OAAA,EACE,UAAA,gBAAAA;AAAA,MAACC;AAAA,MAAA;AAAA,QACE,UAAUT;AAAA,QACV,UAAU,CAACU,MAAcP,EAAoB,QAAQO,CAAS;AAAA,QAC9D,eAAe,CAACC,MAASb,EAAsBa,CAAI;AAAA,MAAA;AAAA,IAAA,GAEzD;AAAA,IACCd,KACE,gBAAAW;AAAA,MAACI;AAAA,MAAA;AAAA,QACE,OAAO;AAAA,QACP,SACG,gBAAAJ,EAAAK,GAAA,EACG,UAAA,gBAAAL;AAAA,UAACM;AAAA,UAAA;AAAA,YACE,OAAM;AAAA,YACN,MAAM;AAAA,YACN,YAAYpB;AAAA,YACZ,UAAU,CAACqB,MAAQpB,EAAaoB,CAAG;AAAA,YACnC,MAAK;AAAA,YACL,aAAY;AAAA,UAAA;AAAA,QAAA,GAElB;AAAA,QAEH,eAAcC,IAAAf,EAAmB,UAAnB,gBAAAe,EAA0B;AAAA,QACxC,gBAAgBf,EAAmB,YAAY,yDAAyD;AAAA,QACxG,YAAY,MAAMH,EAAsB,EAAE;AAAA,QAC1C,OAAM;AAAA,QACN,iBAAiB,EAAE,OAAO,SAAS,QAAQ,MAAMA,EAAsB,EAAE,EAAA;AAAA,QACzE,eAAe;AAAA,UACZ,OAAO;AAAA,UACP,MAAM;AAAA,UACN,MAAM;AAAA,UACN,WAAWG,EAAmB;AAAA,UAC9B,QAAQ,MAAMA,EAAmB,OAAO,EAAE,YAAAV,GAAY,MAAM,QAAQ,UAAAC,GAAoB,MAAM,EAAE,OAAOE,EAAA,GAAa;AAAA,QAAA;AAAA,MACvH;AAAA,IAAA;AAAA,EACH,GAEN;AAEN;"}
|