@git-temporal/git-temporal-react
Version:
<!-- START doctoc generated TOC please keep comment here to allow auto update --> <!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->
66 lines (65 loc) • 2.81 kB
JavaScript
;
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
result["default"] = mod;
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const react_1 = __importStar(require("react"));
const styles_1 = require("app/styles");
const logger_1 = require("app/utilities/logger");
const DirectoryTree_1 = require("app/components/DirectoryTree");
const hooks_1 = require("app/utilities/hooks");
const outerStyle = {
_extends: 'flexRow',
transition: 'all 1s ease',
overflow: 'scroll',
};
exports.DirectoryDifferences = (props) => {
const [expandedNodes, setExpandedNodes] = react_1.useState([]);
const prevModifiedFiles = hooks_1.usePrevious({ modifiedFiles: props.modifiedFiles });
react_1.useEffect(() => {
if (didModifiedFilesChange(prevModifiedFiles)) {
logger_1.debug('componentDidUpdate modifiedFiles changed');
}
});
const { leftTree, rightTree } = props;
return (react_1.default.createElement("div", { style: styles_1.style(outerStyle, props.style) },
react_1.default.createElement(DirectoryTree_1.DirectoryTree, { fileTree: leftTree, expandedNodes: expandedNodes, onExpandNode: onExpandNode, onFileClick: onFileClick }),
react_1.default.createElement(DirectoryTree_1.DirectoryTree, { fileTree: rightTree, expandedNodes: expandedNodes, onExpandNode: onExpandNode, onFileClick: onFileClick })));
function didModifiedFilesChange(prevModifiedFiles) {
const { modifiedFiles } = props;
if (!modifiedFiles || !prevModifiedFiles) {
return modifiedFiles !== prevModifiedFiles;
}
if (modifiedFiles.length !== prevModifiedFiles.length) {
return true;
}
return !modifiedFiles.every((file, index) => {
const prevFile = prevModifiedFiles[index];
const result = file.path === prevFile.path &&
file.delta === prevFile.delta &&
file.status === prevFile.status;
return result;
});
}
function onFileClick(fullPath) {
props.onFileClick(fullPath);
}
function onExpandNode(fullPath) {
const currentIndex = expandedNodes.indexOf(fullPath);
let newExpandedNodes;
if (currentIndex === -1) {
newExpandedNodes = expandedNodes.slice(0);
newExpandedNodes.push(fullPath);
}
else {
newExpandedNodes = expandedNodes
.slice(0, currentIndex)
.concat(expandedNodes.slice(currentIndex + 1));
}
setExpandedNodes(newExpandedNodes);
}
};