import React, { useState, useEffect } from 'react'; import { isEmpty } from 'lodash'; import { useDispatch } from 'react-redux'; import { Table, Thead, Tbody, Tr, Th } from '@strapi/design-system/Table'; import { TableLabel } from '@strapi/design-system/Text'; import { BaseCheckbox } from '@strapi/design-system/BaseCheckbox'; import ConfigDiff from '../ConfigDiff'; import FirstExport from '../FirstExport'; import NoChanges from '../NoChanges'; import ConfigListRow from './ConfigListRow'; import { setConfigPartialDiffInState } from '../../state/actions/Config'; const ConfigList = ({ diff, isLoading }) => { const [openModal, setOpenModal] = useState(false); const [originalConfig, setOriginalConfig] = useState({}); const [newConfig, setNewConfig] = useState({}); const [cName, setCname] = useState(''); const [rows, setRows] = useState([]); const [checkedItems, setCheckedItems] = useState([]); const dispatch = useDispatch(); const getConfigState = (configName) => { if ( diff.fileConfig[configName] && diff.databaseConfig[configName] ) { return 'Different'; } else if ( diff.fileConfig[configName] && !diff.databaseConfig[configName] ) { return 'Only in sync dir'; } else if ( !diff.fileConfig[configName] && diff.databaseConfig[configName] ) { return 'Only in DB'; } }; useEffect(() => { if (isEmpty(diff.diff)) { setRows([]); return; } const formattedRows = []; Object.keys(diff.diff).map((name) => { const type = name.split('.')[0]; // Grab the first part of the filename. const formattedName = name.split(/\.(.+)/)[1]; // Grab the rest of the filename minus the file extension. setCheckedItems(checkedItems.concat(true)); formattedRows.push({ configName: formattedName, configType: type, state: getConfigState(name), onClick: (configType, configName) => { setOriginalConfig(diff.fileConfig[`${configType}.${configName}`]); setNewConfig(diff.databaseConfig[`${configType}.${configName}`]); setCname(`${configType}.${configName}`); setOpenModal(true); }, }); }); setRows(formattedRows); }, [diff]); useEffect(() => { const newPartialDiff = []; checkedItems.map((item, index) => { if (item && rows[index]) newPartialDiff.push(`${rows[index].configType}.${rows[index].configName}`); }); dispatch(setConfigPartialDiffInState(newPartialDiff)); }, [checkedItems]); const closeModal = () => { setOriginalConfig({}); setNewConfig({}); setCname(''); setOpenModal(false); }; if (!isLoading && !isEmpty(diff.message)) { return ; } if (!isLoading && isEmpty(diff.diff)) { return ; } const allChecked = checkedItems && checkedItems.every(Boolean); const isIndeterminate = checkedItems.some(Boolean) && !allChecked; return (
{rows.map((row, index) => ( { checkedItems[index] = !checkedItems[index]; setCheckedItems([...checkedItems]); }} /> ))}
setCheckedItems(checkedItems.map(() => value))} value={allChecked} /> Config name Config type State
); }; export default ConfigList;