mirror of
https://github.com/rowyio/rowy.git
synced 2025-12-29 00:16:39 +01:00
98 lines
2.3 KiB
TypeScript
98 lines
2.3 KiB
TypeScript
import _find from "lodash/find";
|
|
|
|
import { makeStyles, createStyles } from "@mui/styles";
|
|
import { Grid } from "@mui/material";
|
|
|
|
import { IStepProps } from ".";
|
|
import Column from "../Column";
|
|
import Cell from "../Cell";
|
|
|
|
import { useProjectContext } from "contexts/ProjectContext";
|
|
|
|
const useStyles = makeStyles((theme) =>
|
|
createStyles({
|
|
root: {
|
|
minHeight: 300,
|
|
height: "calc(100% - 80px)",
|
|
},
|
|
|
|
container: {
|
|
height: "100%",
|
|
display: "flex",
|
|
flexDirection: "column",
|
|
overflow: "scroll",
|
|
},
|
|
|
|
spacer: {
|
|
width: theme.spacing(3),
|
|
height: theme.spacing(3),
|
|
flexShrink: 0,
|
|
},
|
|
|
|
header: {
|
|
position: "sticky",
|
|
top: 0,
|
|
zIndex: 1,
|
|
},
|
|
data: {
|
|
flexGrow: 1,
|
|
},
|
|
|
|
column: {
|
|
width: 200,
|
|
flexShrink: 0,
|
|
marginLeft: -1,
|
|
|
|
"&:first-of-type": { marginLeft: 0 },
|
|
},
|
|
})
|
|
);
|
|
|
|
export default function Step4Preview({ csvData, config }: IStepProps) {
|
|
const classes = useStyles();
|
|
const { tableState } = useProjectContext();
|
|
|
|
if (!tableState) return null;
|
|
|
|
const columns = config.pairs.map(({ csvKey, columnKey }) => ({
|
|
csvKey,
|
|
columnKey,
|
|
...(tableState!.columns[columnKey] ??
|
|
_find(config.newColumns, { key: columnKey }) ??
|
|
{}),
|
|
}));
|
|
|
|
return (
|
|
<div className={classes.root}>
|
|
<div className={classes.container}>
|
|
<Grid container wrap="nowrap" className={classes.header}>
|
|
{columns.map(({ key, name, type }) => (
|
|
<Grid item key={key} className={classes.column}>
|
|
<Column label={name} type={type} />
|
|
</Grid>
|
|
))}
|
|
<Grid item className={classes.spacer} />
|
|
</Grid>
|
|
|
|
<Grid container wrap="nowrap" className={classes.data}>
|
|
{columns.map(({ csvKey, name, columnKey, type }) => (
|
|
<Grid item key={csvKey} className={classes.column}>
|
|
{csvData.rows.slice(0, 50).map((row, i) => (
|
|
<Cell
|
|
key={csvKey + i}
|
|
field={columnKey}
|
|
value={row[columnKey]}
|
|
type={type}
|
|
name={name}
|
|
/>
|
|
))}
|
|
<Grid item className={classes.spacer} />
|
|
</Grid>
|
|
))}
|
|
<Grid item className={classes.spacer} />
|
|
</Grid>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|