2024-11-06 12:12:39 +00:00
|
|
|
import React, { Fragment, useCallback, useState } from 'react';
|
|
|
|
import PropTypes from 'prop-types';
|
|
|
|
import { Modal, ModalHeader, ModalBody, TabContent, TabPane, Nav, NavItem, NavLink } from 'reactstrap';
|
|
|
|
import { gettext, enableRepoAutoDel } from '../../utils/constants';
|
|
|
|
import LibHistorySettingPanel from './lib-settings/lib-history-setting-panel';
|
|
|
|
import LibAutoDelSettingPanel from './lib-settings/lib-old-files-auto-del-setting-panel';
|
|
|
|
import {
|
|
|
|
MetadataStatusManagementDialog as LibExtendedPropertiesSettingPanel,
|
|
|
|
MetadataFaceRecognitionDialog as LibFaceRecognitionSettingPanel,
|
2024-11-27 03:18:06 +00:00
|
|
|
MetadataTagsStatusDialog as LibMetadataTagsStatusSettingPanel,
|
2024-12-13 08:41:42 +00:00
|
|
|
MetadataOCRStatusManagementDialog as LibMetadataOCRStatusSettingPanel,
|
2024-11-06 12:12:39 +00:00
|
|
|
useMetadata
|
|
|
|
} from '../../metadata';
|
2024-11-22 09:11:55 +00:00
|
|
|
import { useMetadataStatus } from '../../hooks';
|
2024-11-06 12:12:39 +00:00
|
|
|
|
|
|
|
import '../../css/lib-settings.css';
|
|
|
|
|
2024-11-22 09:11:55 +00:00
|
|
|
const TAB = {
|
2024-11-27 03:18:06 +00:00
|
|
|
HISTORY_SETTING: 'history_setting',
|
|
|
|
AUTO_DEL_SETTING: 'auto_delete_setting',
|
|
|
|
EXTENDED_PROPERTIES_SETTING: 'extended_properties_setting',
|
|
|
|
FACE_RECOGNITION_SETTING: 'face_recognition_setting',
|
2024-12-13 08:41:42 +00:00
|
|
|
TAGS_SETTING: 'tags_setting',
|
|
|
|
OCR_SETTING: 'ocr_setting',
|
2024-11-22 09:11:55 +00:00
|
|
|
};
|
|
|
|
|
2024-11-06 12:12:39 +00:00
|
|
|
const propTypes = {
|
|
|
|
toggleDialog: PropTypes.func.isRequired,
|
|
|
|
repoID: PropTypes.string.isRequired,
|
|
|
|
currentRepoInfo: PropTypes.object.isRequired
|
|
|
|
};
|
|
|
|
|
|
|
|
const LibSettingsDialog = ({ repoID, currentRepoInfo, toggleDialog, tab }) => {
|
2024-11-27 03:18:06 +00:00
|
|
|
const [activeTab, setActiveTab] = useState(tab || TAB.HISTORY_SETTING);
|
2024-11-06 12:12:39 +00:00
|
|
|
|
|
|
|
const toggleTab = useCallback((tab) => {
|
|
|
|
setActiveTab(tab);
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
const onTabKeyDown = useCallback((e) => {
|
|
|
|
if (e.key == 'Enter' || e.key == 'Space') {
|
|
|
|
e.target.click();
|
|
|
|
}
|
|
|
|
}, []);
|
|
|
|
|
|
|
|
const { encrypted, is_admin } = currentRepoInfo;
|
|
|
|
const { enableMetadataManagement } = window.app.pageOptions;
|
2024-11-22 09:11:55 +00:00
|
|
|
const { enableFaceRecognition, updateEnableFaceRecognition } = useMetadata();
|
2024-12-13 08:41:42 +00:00
|
|
|
const { enableMetadata, updateEnableMetadata, enableTags, tagsLang, updateEnableTags, enableOCR, updateEnableOCR } = useMetadataStatus();
|
2024-11-06 12:12:39 +00:00
|
|
|
const enableHistorySetting = is_admin; // repo owner, admin of the department which the repo belongs to, and ...
|
|
|
|
const enableAutoDelSetting = is_admin && enableRepoAutoDel;
|
|
|
|
const enableExtendedPropertiesSetting = !encrypted && is_admin && enableMetadataManagement;
|
2024-11-22 09:11:55 +00:00
|
|
|
const enableMetadataOtherSettings = enableExtendedPropertiesSetting && enableMetadata;
|
2024-11-06 12:12:39 +00:00
|
|
|
|
|
|
|
return (
|
|
|
|
<div>
|
|
|
|
<Modal isOpen={true} className="lib-settings-dialog" toggle={toggleDialog}>
|
|
|
|
<ModalHeader toggle={toggleDialog}>
|
|
|
|
{gettext('Settings')}
|
|
|
|
</ModalHeader>
|
|
|
|
<ModalBody className="d-md-flex p-md-0" role="tablist">
|
|
|
|
<Fragment>
|
|
|
|
<div className="lib-setting-nav p-4">
|
|
|
|
<Nav pills className="flex-column">
|
2024-11-22 09:11:55 +00:00
|
|
|
{enableHistorySetting && (
|
2024-11-27 03:18:06 +00:00
|
|
|
<NavItem role="tab" aria-selected={activeTab === TAB.HISTORY_SETTING} aria-controls="history-setting-panel">
|
|
|
|
<NavLink className={activeTab === TAB.HISTORY_SETTING ? 'active' : ''} onClick={(toggleTab.bind(this, TAB.HISTORY_SETTING))} tabIndex="0" onKeyDown={onTabKeyDown}>
|
2024-11-22 09:11:55 +00:00
|
|
|
{gettext('History')}
|
|
|
|
</NavLink>
|
|
|
|
</NavItem>
|
|
|
|
)}
|
|
|
|
{enableAutoDelSetting && (
|
2024-11-27 03:18:06 +00:00
|
|
|
<NavItem role="tab" aria-selected={activeTab === TAB.AUTO_DEL_SETTING} aria-controls="auto-del-setting-panel">
|
|
|
|
<NavLink className={activeTab === TAB.AUTO_DEL_SETTING ? 'active' : ''} onClick={toggleTab.bind(this, TAB.AUTO_DEL_SETTING)} tabIndex="0" onKeyDown={onTabKeyDown}>
|
2024-11-22 09:11:55 +00:00
|
|
|
{gettext('Auto deletion')}
|
|
|
|
</NavLink>
|
|
|
|
</NavItem>
|
|
|
|
)}
|
|
|
|
{enableExtendedPropertiesSetting && (
|
2024-11-27 03:18:06 +00:00
|
|
|
<NavItem role="tab" aria-selected={activeTab === TAB.EXTENDED_PROPERTIES_SETTING} aria-controls="extended-properties-setting-panel">
|
|
|
|
<NavLink className={activeTab === TAB.EXTENDED_PROPERTIES_SETTING ? 'active' : ''} onClick={toggleTab.bind(this, TAB.EXTENDED_PROPERTIES_SETTING)} tabIndex="0" onKeyDown={onTabKeyDown}>
|
2024-11-22 09:11:55 +00:00
|
|
|
{gettext('Extended properties')}
|
|
|
|
</NavLink>
|
|
|
|
</NavItem>
|
|
|
|
)}
|
|
|
|
{enableMetadataOtherSettings && (
|
2024-11-27 03:18:06 +00:00
|
|
|
<NavItem role="tab" aria-selected={activeTab === TAB.FACE_RECOGNITION_SETTING} aria-controls="face-recognition-setting-panel">
|
|
|
|
<NavLink className={activeTab === TAB.FACE_RECOGNITION_SETTING ? 'active' : ''} onClick={toggleTab.bind(this, TAB.FACE_RECOGNITION_SETTING)} tabIndex="0" onKeyDown={onTabKeyDown}>
|
2024-11-22 09:11:55 +00:00
|
|
|
{gettext('Face recognition')}
|
|
|
|
</NavLink>
|
|
|
|
</NavItem>
|
|
|
|
)}
|
|
|
|
{enableMetadataOtherSettings && (
|
2024-11-27 03:18:06 +00:00
|
|
|
<NavItem role="tab" aria-selected={activeTab === TAB.TAGS_SETTING} aria-controls="tags-setting-panel">
|
|
|
|
<NavLink className={activeTab === TAB.TAGS_SETTING ? 'active' : ''} onClick={toggleTab.bind(this, TAB.TAGS_SETTING)} tabIndex="0" onKeyDown={onTabKeyDown}>
|
2024-11-22 09:11:55 +00:00
|
|
|
{gettext('Tags')}
|
|
|
|
</NavLink>
|
|
|
|
</NavItem>
|
|
|
|
)}
|
2024-12-13 08:41:42 +00:00
|
|
|
{enableMetadataOtherSettings && (
|
|
|
|
<NavItem role="tab" aria-selected={activeTab === TAB.OCR_SETTING} aria-controls="ocr-setting-panel">
|
|
|
|
<NavLink className={activeTab === TAB.OCR_SETTING ? 'active' : ''} onClick={toggleTab.bind(this, TAB.OCR_SETTING)} tabIndex="0" onKeyDown={onTabKeyDown}>
|
|
|
|
{gettext('OCR')}
|
|
|
|
</NavLink>
|
|
|
|
</NavItem>
|
|
|
|
)}
|
2024-11-06 12:12:39 +00:00
|
|
|
</Nav>
|
|
|
|
</div>
|
|
|
|
<TabContent activeTab={activeTab} className="flex-fill">
|
2024-11-27 03:18:06 +00:00
|
|
|
{(enableHistorySetting && activeTab === TAB.HISTORY_SETTING) && (
|
|
|
|
<TabPane tabId={TAB.HISTORY_SETTING} role="tabpanel" id="history-setting-panel">
|
2024-11-06 12:12:39 +00:00
|
|
|
<LibHistorySettingPanel
|
|
|
|
repoID={repoID}
|
|
|
|
toggleDialog={toggleDialog}
|
|
|
|
/>
|
|
|
|
</TabPane>
|
2024-11-22 09:11:55 +00:00
|
|
|
)}
|
2024-11-27 03:18:06 +00:00
|
|
|
{(enableAutoDelSetting && activeTab === TAB.AUTO_DEL_SETTING) && (
|
|
|
|
<TabPane tabId={TAB.AUTO_DEL_SETTING} role="tabpanel" id="auto-del-setting-panel">
|
2024-11-06 12:12:39 +00:00
|
|
|
<LibAutoDelSettingPanel
|
|
|
|
repoID={repoID}
|
|
|
|
toggleDialog={toggleDialog}
|
|
|
|
/>
|
|
|
|
</TabPane>
|
2024-11-22 09:11:55 +00:00
|
|
|
)}
|
2024-11-27 03:18:06 +00:00
|
|
|
{(enableExtendedPropertiesSetting && activeTab === TAB.EXTENDED_PROPERTIES_SETTING) && (
|
|
|
|
<TabPane tabId={TAB.EXTENDED_PROPERTIES_SETTING} role="tabpanel" id="extended-properties-setting-panel">
|
2024-11-06 12:12:39 +00:00
|
|
|
<LibExtendedPropertiesSettingPanel
|
|
|
|
repoID={repoID}
|
|
|
|
value={enableMetadata}
|
2024-11-22 09:11:55 +00:00
|
|
|
submit={updateEnableMetadata}
|
2024-11-06 12:12:39 +00:00
|
|
|
toggleDialog={toggleDialog}
|
|
|
|
/>
|
|
|
|
</TabPane>
|
2024-11-22 09:11:55 +00:00
|
|
|
)}
|
2024-11-27 03:18:06 +00:00
|
|
|
{(enableMetadataOtherSettings && activeTab === TAB.FACE_RECOGNITION_SETTING) && (
|
|
|
|
<TabPane tabId={TAB.FACE_RECOGNITION_SETTING} role="tabpanel" id="face-recognition-setting-panel">
|
2024-11-06 12:12:39 +00:00
|
|
|
<LibFaceRecognitionSettingPanel
|
|
|
|
repoID={repoID}
|
|
|
|
value={enableFaceRecognition}
|
2024-11-22 09:11:55 +00:00
|
|
|
submit={updateEnableFaceRecognition}
|
|
|
|
toggleDialog={toggleDialog}
|
|
|
|
/>
|
|
|
|
</TabPane>
|
|
|
|
)}
|
2024-11-27 03:18:06 +00:00
|
|
|
{(enableMetadataOtherSettings && activeTab === TAB.TAGS_SETTING) && (
|
|
|
|
<TabPane tabId={TAB.TAGS_SETTING} role="tabpanel" id="tags-setting-panel">
|
|
|
|
<LibMetadataTagsStatusSettingPanel
|
2024-11-22 09:11:55 +00:00
|
|
|
repoID={repoID}
|
|
|
|
value={enableTags}
|
2024-12-06 09:34:54 +00:00
|
|
|
lang={tagsLang}
|
2024-11-22 09:11:55 +00:00
|
|
|
submit={updateEnableTags}
|
2024-11-06 12:12:39 +00:00
|
|
|
toggleDialog={toggleDialog}
|
|
|
|
/>
|
|
|
|
</TabPane>
|
2024-11-22 09:11:55 +00:00
|
|
|
)}
|
2024-12-13 08:41:42 +00:00
|
|
|
{(enableMetadataOtherSettings && activeTab === TAB.OCR_SETTING) && (
|
|
|
|
<TabPane tabId={TAB.OCR_SETTING} role="tabpanel" id="ocr-setting-panel">
|
|
|
|
<LibMetadataOCRStatusSettingPanel
|
|
|
|
repoID={repoID}
|
|
|
|
value={enableOCR}
|
|
|
|
lang={tagsLang}
|
|
|
|
submit={updateEnableOCR}
|
|
|
|
toggleDialog={toggleDialog}
|
|
|
|
/>
|
|
|
|
</TabPane>
|
|
|
|
)}
|
2024-11-06 12:12:39 +00:00
|
|
|
</TabContent>
|
|
|
|
</Fragment>
|
|
|
|
</ModalBody>
|
|
|
|
</Modal>
|
|
|
|
</div>
|
|
|
|
);
|
|
|
|
};
|
|
|
|
|
|
|
|
LibSettingsDialog.propTypes = propTypes;
|
|
|
|
|
|
|
|
export default LibSettingsDialog;
|
2024-11-26 08:19:27 +00:00
|
|
|
|
|
|
|
export { TAB };
|