dyomedea/src/components/trkseg/TrksegViewer.tsx

62 lines
1.6 KiB
TypeScript
Raw Normal View History

2023-01-03 14:24:50 +00:00
import { Component } from 'solid-js';
import { peekCachedSignal } from '../../workers/cached-signals';
import Tree from '../tree';
import TrkIcon from '../../icons/human-footprints-svgrepo-com.svg?component-solid';
2023-01-07 17:46:14 +00:00
import { useI18n } from '@solid-primitives/i18n';
import { getFormatedLength } from '../../lib/ol';
import DisplayOrGetAddress from '../display-or-get-address';
import { LineString } from 'ol/geom';
2023-01-03 14:24:50 +00:00
interface Props {
trksegId: string;
}
const TrksegViewer: Component<Props> = ({ trksegId }) => {
2023-01-07 17:46:14 +00:00
const [t, { add, locale, dict }] = useI18n();
const trkseg = peekCachedSignal({ id: trksegId, action: 'getTrkseg' });
2023-01-03 14:24:50 +00:00
console.log({ caller: 'TrksegViewer', trksegId, trkseg: trkseg() });
2023-01-07 17:46:14 +00:00
const lineString = new LineString(
trkseg().trkpt.map((trkpt: any) => [trkpt.$.lon, trkpt.$.lat])
);
2023-01-07 18:18:25 +00:00
const firstTrkpt = () => trkseg().trkpt.at(0);
const lastTrkpt = () => trkseg().trkpt.at(-1);
const title = () => {
return firstTrkpt().time;
};
2023-01-03 14:24:50 +00:00
return (
<Tree
title={
<>
<TrkIcon fill='grey' width='16' height='16' /> {title()}
</>
}
2023-01-07 17:46:14 +00:00
content={
<>
<div>
{getFormatedLength(lineString)} {t('from')}{' '}
<DisplayOrGetAddress
2023-01-07 18:18:25 +00:00
target={firstTrkpt}
2023-01-07 17:46:14 +00:00
putAction='putTrkpt'
putParamName='trkpt'
/>{' '}
{t('to')}{' '}
<DisplayOrGetAddress
2023-01-07 18:18:25 +00:00
target={lastTrkpt}
2023-01-07 17:46:14 +00:00
putAction='putTrkpt'
putParamName='trkpt'
/>
</div>
</>
}
2023-01-03 14:24:50 +00:00
subTree={undefined}
/>
);
};
export default TrksegViewer;