53 lines
1.6 KiB
JavaScript
53 lines
1.6 KiB
JavaScript
import React from 'react';
|
|
import { render, Box, Text, useApp, useInput } from 'ink';
|
|
import chalk from 'chalk';
|
|
import { getSteuer } from '../src/services/misc/getSteuer.js';
|
|
import { closePool } from '../src/db/mssqlClient.js';
|
|
|
|
import '../src/config/env.js';
|
|
|
|
const e = React.createElement;
|
|
|
|
function SteuerTable({ steuerklassen }) {
|
|
return e(Box, { flexDirection: 'column' },
|
|
e(Text, null, chalk.cyan.bold('=== Steuerklassen ===')),
|
|
e(Box, { marginTop: 1, flexDirection: 'column' },
|
|
e(Text, { dimColor: true }, ' ID Rate Name'),
|
|
...steuerklassen.map((row) =>
|
|
e(Text, { key: row.kSteuerklasse },
|
|
' ',
|
|
chalk.white(String(row.kSteuerklasse).padEnd(4)),
|
|
chalk.yellow(`${String(row.fSteuersatz).padStart(3)}%`.padEnd(8)),
|
|
row.cName ?? '—',
|
|
row.nStandard === 1 ? chalk.gray(' (standard)') : ''
|
|
)
|
|
)
|
|
),
|
|
e(Box, { marginTop: 1 }, e(Text, null, chalk.gray('Press any key to exit')))
|
|
);
|
|
}
|
|
|
|
const App = ({ steuerklassen }) => {
|
|
const { exit } = useApp();
|
|
|
|
useInput(() => {
|
|
closePool()
|
|
.catch(() => {})
|
|
.finally(() => {
|
|
exit();
|
|
process.exit(0);
|
|
});
|
|
});
|
|
|
|
return e(SteuerTable, { steuerklassen });
|
|
};
|
|
|
|
try {
|
|
const { steuerklassen } = await getSteuer();
|
|
render(e(App, { steuerklassen }));
|
|
} catch (error) {
|
|
console.error(chalk.red(`Error: ${error.message}`));
|
|
await closePool().catch(() => {});
|
|
process.exit(1);
|
|
}
|